Tornado:python编写的web服务器兼web应用框架
打开靶机发现有三个文件
flag.txt
welcome.txt
[render]{.green}是python中的一个渲染函数 渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。
- render方法的实质就是生成template模板;
- 通过调用一个方法来生成,而这个方法是通过render方法的参数传递给它的;
- 这个方法有三个参数,分别提供标签名,标签相关属性,标签内部的html内容
- 通过这三个参数,可以生成一个完整的木模板
hints.txt
Get cookie_secret
由flag.txt知filename=/fllllllllllllag,现在只要知道cookie_secret是多少就能写payload拿取flag.
由已知3个文件格式推测payload格式可能为
file?filename=/fllllllllllllag&filehash=xxxxxxx
我先随便输入一个尝试一下,测试完后发现有error界面,还有/error?msg=Error
见识不够,看了wp知道是服务端模板注入攻击SSTI
界面回显也是23333.那肯定是要我们在双括号中键入什么了
之前遇见过一次SSTI所以知道双括号应该是固定的写法,但至于为什么没有深究,在Tornado官方文档中看到
模板表达式被双花括号包围;内容可以是任何python表达式,它将根据当前的自动转义设置进行转义并插入到输出中。其他模板指令使用.
1 | {{ ... }}{% %}{# ... #}(jinjia2语法) |
渲染函数在渲染的时候,往往对用户输入的变量不做渲染,
关于SSTI引发的真正原因是:render_template渲染函数的问题
cookie_secret在Application对象settings属性中 另外self.application.settings有一个别名
1 | RequestHandler.settings |
handler 指向RequestHandler(封装对请求处理的所有信息和处理方法)
而RequestHandler.settings又指向self.application.settings
于是所有handler.settings就指向RequestHandler.application.settings了!
得到cookie_secret:036cc74f-81bc-4583-9f02-e7cdb12cfa7c
编写python脚本计算filehash值
1 | import hashlib |
filehash=bd130d4511c341d7397c50a7f1f10c77
payload
1 | file?filename=/fllllllllllllag&filehash=bd130d4511c341d7397c50a7f1f10c77 |
得到flag