溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ctf.#第二屆,逆向部分writeup——第五題

發(fā)布時(shí)間:2020-06-19 23:50:49 來(lái)源:網(wǎng)絡(luò) 閱讀:1402 作者:strawdog 欄目:安全技術(shù)

題目:見附件


這是最后一題,難度加倍。

ctf.#第二屆,逆向部分writeup——第五題

看題目意思,應(yīng)該是模擬一個(gè)下載者,從網(wǎng)上下載一個(gè)shellcode然后執(zhí)行。要求修復(fù)這個(gè)shellcode然后獲得key。


OD載入MFC_ASM.exe,F(xiàn)9出現(xiàn)程序界面。

ctf.#第二屆,逆向部分writeup——第五題

由于平時(shí)寫C程序訪問網(wǎng)絡(luò)都直接用socket,找了一下竟然沒有發(fā)現(xiàn)socket調(diào)用,看了導(dǎo)入表,發(fā)現(xiàn)原來(lái)使用wininet.dll提供的http封裝。

(這里不知道有沒有更好的方法能讓OD跟蹤到button按鈕的用戶代碼調(diào)用,還請(qǐng)大牛不吝賜教)

直接按button,出現(xiàn)錯(cuò)誤:

ctf.#第二屆,逆向部分writeup——第五題

此時(shí)的棧情況:

ctf.#第二屆,逆向部分writeup——第五題

BBBBBBBB和DDDDDDD數(shù)據(jù)和Exploit.html文件里面開頭的是一致的,可見程序已經(jīng)將Exploit.html下載并拷貝到了堆棧地址0012DF30。

為了跟蹤到button按鈕的處理函數(shù),還是從字符串入手,隨便翻翻發(fā)現(xiàn):

ctf.#第二屆,逆向部分writeup——第五題

此處有http協(xié)議的引用,下斷點(diǎn)后,按button能停下來(lái)。一路F8,可以跟到00401519處,此處的retn指令返回到了shellcode中的錯(cuò)誤地址。

需要注意的是,shellcode的起始地址是0012DF30,但00401518處的leave指令,會(huì)將esp指向0012E130。這個(gè)地址里面的值,就是前面錯(cuò)誤對(duì)話框中出現(xiàn)的值。

之所以要指出這個(gè),是因?yàn)楫?dāng)前的esp指向了shellcode內(nèi)部,如果執(zhí)行shellcode代碼,會(huì)覆蓋掉shellcode的一些區(qū)域,導(dǎo)致出錯(cuò)。這就就是需要修正的第一個(gè)有問題的地方。


下面就是要分析Exploit.html這個(gè)文件了,載入IDA,進(jìn)行靜態(tài)分析。由于對(duì)windows下的shellcode不是很熟悉,這里花了非常多的時(shí)間。關(guān)鍵點(diǎn)就是如大牛提示的,需要一個(gè)一個(gè)函數(shù)分析,一段一段shellcode中的字節(jié)尋找。由于這個(gè)shellcode的復(fù)雜度,修復(fù)實(shí)際上就是尋找到一個(gè)合適的入口點(diǎn),然后在OD中將EIP指向它,直接執(zhí)行就可以彈出key。


函數(shù)還是比較容易尋找的,一般以push ebp開頭,后面跟著sub esp(或add esp)。IDA能分析出一些函數(shù),許多還是要自己去尋找。

這里IDA的Xrefs功能(快捷鍵X)實(shí)在是太有用了。

最終分析下來(lái)的函數(shù)列表:

ctf.#第二屆,逆向部分writeup——第五題

這里幾個(gè)關(guān)鍵函數(shù)我都做了注釋,里面有非常多的代碼值得學(xué)習(xí),比如fs:[eax]這種獲取kernel32基址的方法,以及建立shellcode的導(dǎo)入函數(shù)表,運(yùn)行時(shí)動(dòng)態(tài)獲取當(dāng)前指令地址,從而實(shí)現(xiàn)在shellcode中尋址與shellcode加載地址無(wú)關(guān)。


這里幾乎找全了shellcode中的所有函數(shù),通過(guò)Xrefs分析,還是沒有哪里調(diào)用了FindFunctions等關(guān)鍵函數(shù),也就是沒有找到入口。只能在IDA代碼text視圖下,一點(diǎn)點(diǎn)的看,終于在00000CDD處找到一段沒有定義的數(shù)據(jù)字節(jié)。按C,定義為code后:

ctf.#第二屆,逆向部分writeup——第五題

Great!入口點(diǎn)應(yīng)該就在這里了。因?yàn)槠渌胤匠隽俗址砗?0字節(jié),沒有多余的疑似未定義代碼了。


OD載入,斷點(diǎn)在00401518處,修改EBP為0012DF30。F8到00401519,修改當(dāng)前棧上0012DF34處的值為0012DF30+CDD。然后F9,直接彈出對(duì)話框,key就在這里啦!






附件:http://down.51cto.com/data/2365159
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI