Bamboofox CTF解題記錄,一如往常地到處找題目增進自己打CTF的戰力╰(°▽°)╯
我選擇先從這裡開始做
Writeup
Wargame 0-1 Magic [100]
Description Do you believe in magic?
Hint Stack buffer overflow
拿到檔案,magic: ELF 32-bit LSB executable,提示已經告知是Stack buffer overflow了,所以我直接IDA拆開來看了。
然後還有一個never_use()可以用來開shell,所以題目應該是希望我們把ret address指到該函式。
從ax, [ebp-44h]
可知buffer大小是0x44,然後因為mov dword ptr [esp], offset aS ; "%s"
可知scanf()的格式化參數是%s,所以可以用垃圾把Buffer塞爆。
已經了解Buffer overflow成立之後就來建構payload吧!
需要塞0x44個byte進去把Buffer塞滿,這樣做之後會頂到ebp,所以在額外塞0x4個byte頂過ebp,這邊開始就是return address了! 蓋上never_use()的記憶體位置完成攻擊~ Payload: 0x48個byte + never_use()的位置
其實這樣攻擊是不會成功的,因為還有一個函式被忽略了,do_magic(),題目直接給出source
|
|
如果不對do_magic進行繞過,那payload會直接跟亂數XOR變成垃圾QQ
由呼叫do_magic的地方可知控制XOR的次數是透過strlen(),這個函式會計算字串的字元數,停下來的方法是讀到一個\x00,那我們就提早讓他停下來就好!
所以payload變成: 0x1個byte + \x00 + (0x44 + 0x4 - 0x2) + never_use()的位置
|
|