[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然後傳輸過去就沒有這個問題惹,收工