前言:一樣,做XCTF題esaytornado時的知識點,還是認真刷題慢慢增加自己的知識面吧。
tornado是python中的一個web應用框架。
拿到題目發現有三個文件:

flag.txt
/flag.txt flag in /fllllllllllllag
發現flag在/fllllllllllllag文件里;
welcome.txt
/welcome.txt render
render是python中的一個渲染函數,渲染變量到模板中,即可以通過傳遞不同的參數形成不同的頁面。
hints.txt
/hints.txt md5(cookie_secret+md5(filename))
filehash=md5(cookie_secret+md5(filename)) 現在filename=/fllllllllllllag,只需要知道cookie_secret的既能訪問flag。
測試后發現還有一個error界面,格式為/error?msg=Error,懷疑存在服務端模板注入攻擊 (SSTI)
嘗試/error?msg={{datetime}} 在Tornado的前端頁面模板中,datetime是指向python中datetime這個模塊,Tornado提供了一些對象別名來快速訪問對象,可以參考Tornado官方文檔

通過查閱文檔發現cookie_secret在Application對象settings屬性中,還發現self.application.settings有一個別名
RequestHandler.settings An alias for self.application.settings.
handler指向的處理當前這個頁面的RequestHandler對象, RequestHandler.settings指向self.application.settings, 因此handler.settings指向RequestHandler.application.settings。
構造payload獲取cookie_secret
/error?msg={{handler.settings}}

'cookie_secret': 'M)Z.>}{O]lYIp(oW7$dc132uDaK<C%wqj@PA![VtR#geh9UHsbnL_+mT5N~J84*r'
計算filehash值:
import hashlib def md5(s): md5 = hashlib.md5() md5.update(s) return md5.hexdigest() def filehash(): filename = '/fllllllllllllag' cookie_secret = 'M)Z.>}{O]lYIp(oW7$dc132uDaK<C%wqj@PA
