护网杯 easy-tornado
知识点:
-
服务端模板注入(ssti)攻击
访问后是这个页面,先看welcome.txt
/welcome.txt
render
没啥东西,但提示了render。
再来是hint.txt
/hints.txt
md5(cookie_secret+md5(filename))
在查看文件的时候,我们发现url的形式基本是这个样子的
filename=/hints.txt&filehash=231db97b02f71727958aa2bd3024add9
猜测hint给出了filehash的计算方式,再来看flag.txt
/flag.txt
flag in /fllllllllllllag
我们知道了flag的文件名(如果题目没有骗我们的话),接下来需要知道cookie_secret才行,但是没有什么线索,我们先尝试更改filename,直接访问,不管filehash对不对。
跳转后,url变成
error?msg=Error
而内容为
Error
发现url中也出现了Error,尝试改变Error,例如123,则url变为error?msg=123
123
于是我们发现页面的内容会随着url的变化而变化,并且与msg一致,再考虑之前提示的render,或许可以猜测是一个模板渲染,服务器对传入的参数进行渲染,所以我们必须判断模板可不可控,尝试
error?msg={{123}}
123
发现双大括号没有被渲染出来,那么可以猜测模板是可控的,我们的输入就是模板,那么接下来就应该找找能否通过模板渲染暴露出cookie_secret,通过题目名知道,服务器是tornado,查阅资料后,通过{{handler.settings}}这个对象可以得知服务器的一些环境变量,通过error?msg={{handler.settings}}
,我们得到如下输出
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'd65b07b0-f1f1-4cd4-8358-efc8b7db39b6'}
得到cookie_secret,便可以通过md5计算出/fllllllllllllag
的hash值,访问url后得到flag
filename=/fllllllllllllag&filehash=f6a8a5dd623507c5db4e1b6993a24851
补充:
tornado中,
handler
指向RequestHandler
而RequestHandler.settings
又指向self.application.settings
所以handler.settings
就指向RequestHandler.application.settings
也就是服务器的应用变量。
版权声明:本文为原创文章,版权归星夜的蓝天所有。
本文链接:http://poi.ac/archives/47/
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载时须注明出处及本声明