星夜的蓝天

护网杯 easy-tornado
护网杯 easy-tornado 知识点: 服务端模板注入(ssti)攻击 访问后是这个页面,先看wel...
扫描右侧二维码阅读全文
07
2020/05

护网杯 easy-tornado

护网杯 easy-tornado

知识点:

  1. 服务端模板注入(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

也就是服务器的应用变量。

最后修改:2020 年 05 月 07 日 11 : 30 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论

召唤看板娘