2012-02-09 159 views
1

我正嘗試使用返回到libc創建緩衝區溢出。返回到libc導致分段錯誤

這裏是攻擊代碼: http://codepad.org/TtoLjAHc。它創建有效負載並將其存儲在名爲badfile的文件中。

這是易受攻擊的代碼: http://codepad.org/DZ7AQy4D。它從壞文件中讀取,應該產生一個shell。

ASLR和堆棧保護已關閉。

攻擊者代碼有效。但是易受攻擊的代碼會導致段錯誤。

任何人都可以請解釋我要去哪裏錯了嗎?

的開發者代碼有關章節:

memset(buffer, "\x90", 52); 
memcpy(buffer,"BUF=",4); 
memcpy(buffer+36, systemAddr,4); 
memcpy(buffer+40,exitAddr,4); 
memcpy(buffer+44, shAddr,4); 
memcpy(buffer+48, nullPad, 4); 

此變量,緩衝器,現寫入到一個名爲BADFILE文件,該文件是由脆弱程序中使用的fread讀()。脆弱的程序 有關章節:

char buffer[12]; 
length = fread (buffer, sizeof (char), 52, badfile); 
+1

請在此處發佈代碼中的_relevant_部分,以及通過在調試器中運行漏洞而學到的知識。 – Mat 2012-02-09 15:09:45

+0

墊子, 你可以看看現在的帖子嗎?我已經提出了相關的代碼部分。 在此先感謝, Roy – user916315 2012-02-09 15:16:51

+3

溢出漏洞非常敏感。你必須花費一些時間用調試器,瞭解堆棧佈局,看看緩衝區在哪裏,返回地址在哪裏,你有多大的溢出以及發生了什麼。我不認爲通過論壇進行調試會起作用。 – ugoren 2012-02-09 15:36:04

回答

-1

您已分配的內存12個字節爲buffer,但你嘗試寫52個字節。因此,你走出陣列挑起分段故障。

嘗試:

*char buffer[12]; 
length = fread (buffer, sizeof (char), **12**, badfile);* 

,它應該工作的罰款。

+0

這是故意的,這是OP試圖利用的故意的緩衝區溢出漏洞。 – interjay 2012-02-09 16:24:35