护网杯 2018 easy_tornado 1题解
前置知识
render函数
详情见:render函数介绍
总结:
- render方法的实质就是生成template模板;
- 通过调用一个方法来生成,而这个方法是通过render方法的参数传递给它的;
- 这个方法有三个参数,分别提供标签名,标签相关属性,标签内部的html内容
- 通过这三个参数,可以生成一个完整的木模板
备注: - render方法可以使用JSX语法,但需要Babel plugin插件;
- render方法里的第三个参数可以使用函数来生成多个组件(特别是如果他们相同的话),只要生成结果是一个数组,且数组元素都是VNode即可;
题目详解
首先打开题目环境 ,有三个目录/flag.txt,/welcome.txt,/hint.txt。
依次打开,得到
同时发现网址里面有传参数filename和filehash,推测这里flag应该是filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))里面。/flag.txt flag in /fllllllllllllag /welcome.txt render /hints.txt md5(cookie_secret+md5(filename))
filename已知为/fllllllllllllag,接下来目标是找cookie_secret。在welcome.txt中有提示render函数,又根据题目easy_tornado可推测是服务器模板注入。因为render是tornado里的函数,可以生成html模板。tornado是用Python编写的Web服务器兼Web应用框架,简单来说就是用来生成模板的东西。和Python相关,和模板相关,就可以推测这可能是个ssti注入题了。
当我尝试把filename换成fllllllllllllag而不改动filehash时,弹出一个错误页面/error?msg=Error。
尝试将msg改为1,回显ORZ,猜测是被ban掉。改为***1***,回显1,证明是有ssti注入的。
查阅tornado官方文档
发现,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,而cookie_secret在RequestHandler.application.settings里,用handler.settings访问RequestHandler.application.settings。构造payload:
求出filebash:eac1bfe012656f58801fbd9723f59cc0http://98562ab7-bff6-412f-8cb0-91c379be2081.node4.buuoj.cn:81/error?msg={{handler.settings}} 回显:{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '12cc2dc7-d62b-4574-a5cf-d70807a506c3'}
构造payload
得到flag:flag{7baaa0ed-2fdb-4aab-acd1-1ee751db2b29}http://98562ab7-bff6-412f-8cb0-91c379be2081.node4.buuoj.cn:81/file?filename=/fllllllllllllag&filehash=eac1bfe012656f58801fbd9723f59cc0 回显:/fllllllllllllag flag{7baaa0ed-2fdb-4aab-acd1-1ee751db2b29}
参考:
https://blog.csdn.net/weixin_45642610/article/details/112519061
https://www.tornadoweb.org/en/latest/guide/templates.html#template-syntax
https://www.cnblogs.com/bwangel23/p/4858870.html
https://blog.csdn.net/qq78827534/article/details/80792514