[CTF][Pwn][BoF] AIS3 Pre-Exam Pwn3D_1

大神請路過Q___Q,這是第一次解Pwn類型題目,想說太久沒發發廢文了,
所以就把分析過程記錄下來惹

是說之前摸BoF都沒用上場,沒想到第一次派上用場是在這種時候XD


題目給的檔案載下來之後,終端機下:file pwn1,可以得知是一個可執行的ELF x64bit在Linux下的文件,接著拖進IDA Pro For x64,熱鍵:Shift+F12檢視所有文字資源,如下圖:

很快可以找到主機用nc連線上去時回應的“Input Your Name”點擊後會看見:


可以看見字串的資源位置,點擊後方Data Xref可以找到呼叫參考來源:

F5照妖鏡下去,IDA Pro分析如下:
可以看到伺服器上回應的程式puts出“Input Your Name”後,做scanf把使用者傳入的Data寫入v1內(應該是char array?)接著就判斷v4是否為0x90909090,是就噴Flag否則就告訴你目前的v4的值為多少(如果沒控制成功,預設會是10)

這邊可以得知的是唯一跟使用者傳入(可控)的是v1,接著我們想控制的是一個被宣告為DWORD的v4(4個BYTE),接著回到組合語言狀態下觀看:

這邊可以得知v1(Buffer)地址為+0x20而v4地址則為+0x04,也就是兩個偏移量差了32 - 4 = 28個BYTE,所以我們可以這樣傳入使用者測資來控制v4:
[........共28個字元塞滿(隨便塞)........][要控制的v4值,4BYTE]

所以本來我很開心的就nc上去然後丟Data:
............................\x90\x90\x90\x90
結果後來發現它不會把跳脫字元轉換為ascii XD,於是又想說,那不如查0x90對應ascii填上去吧?結果我傳入:
沒想到v4的值被改成了0x90C290C2(具體原因是什麼不清楚QQ,應該是因為文字傳送會有文字處理傳輸的問題),後來爬了一下才得知可以這樣下命令:
 echo -e "............................\x90\x90\x90\x90" | nc ip port

-e會把跳脫字元處理成BYTE然後傳輸過去就沒有這個問題惹,收工

留言

這個網誌中的熱門文章

[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持

重建天堂之門:從 32 位元地獄一路打回天堂聖地(上)深度逆向工程 WOW64 設計