2011-10-14 52 views
2

我想寫一個返回到libc漏洞利用,但我不能找出堆棧中的位置應該爲我的system()調用放置參數。return-to-libc exploit:在哪裏爲system()調用提供參數?

該漏洞的函數是

void func(char *str) 
{ 
    char buffer[12]; 
    strcpy(buffer,str); 
} 

堆棧此功能會是這個樣子:

----------- 
str 
----------- 
return address 
----------- 
previous frame pointer 
----------- 
buffer 
----------- 

我知道我必須覆蓋與地址system()調用的返回地址,但我應該在哪裏放置它的參數地址,爲什麼?

謝謝。

回答

0

應該在返回地址的正上方找到指向參數的指針。也就是說,在覆蓋後,你的籌碼應該是這個樣子:

----------- 
shellcode: /bin/whatever ... 
... 
... 
... 
\0 
----------- 
&shellcode <-- str is here 
----------- 
&system  <-- return address is here 
----------- 
previous frame pointer <--- don't corrupt this 
----------- 
padding  <-- buffer 

注意,這意味着你必須知道%esp是什麼,當你到達strcpy(以避免破壞前一幀指針)。而且,沒有一個指針可以包含零字節。

相關問題