参考博客:Python中从服务端模板注入到沙盒逃逸的源码探索 (一) - 先知社区 (aliyun.com)
XCTF系列 // Web | easytornado_Ga1axy_z的博客-CSDN博客
Tornado
Tornado是Python开发的全栈式(full-stack) Web框架和异步网络库,是Python的一种Web开发框架
Tornado的模板注入
通过welcome.txt我们可以看到
很显然,这一题是render模板注入
render模板:
render是python中一种渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,当用户对render内容可控时,就可以注入xss
和flask模板注入的原理差不多
flask模板注入_jjj34的博客-CSDN博客_flask模板注入
分析题目
从这个文件,我们可以知道,filehash的值为 md5( cookie_secret+md5(filename))
从这个文件,我们可以了解到flag在/fllllllllllllag中
因此 我们直接访问 /fllllllllllllag 文件
很显然,利用点出现了
存在某个过滤
根据上文看到的提示中有 cookie_secret 因此我们通过handler.setting 去找cookie_secret
tornado源码如下
根据源码构造payload
1.cookie_secret存放在settings里
2.settings作为参数传给了Application的构造函数,因此可以通过self.application.settings 来获取cookie
3.根据官方文档,RequestHandler.settings的别名是self.application.settings并且handler指向处理当前页面的RequestHandler对象,因此可以通过 handler.settings来获取 cookie_secret
因此我们的payload为
http://111.200.241.244:50619/error?msg={{handler.settings}}
拿到cookie后就是进行md5加密,算出filehash值
加密的网站:md5在线解密破解,md5解密加密 (cmd5.com)
filehash = md5(cookie_secret + md5( /fllllllllllllag))
1.将 /fllllllllllllag进行md5加密 得到 x1
2.将 x1 与cookie_secret 拼接后进行x2
x2就是我们要的filehash
成功解题