2014-07-06 46 views
1

在創建這篇文章之前,我試過並閱讀了以前的所有Q & A,但他們似乎沒有回答我確切的問題。我將EIP指向了ESP地址,並且成功將我的shellcode放入了ESP,但是我得到了一個SIGSEGV,分段錯誤

我也指的是下面的鏈接指南,但我錯過了一些至關重要的東西。

https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/

這裏就是我所做的,到目前爲止,沒有在程序中的緩衝區溢出,我想通了偏移量(使用MSF工具)的EIP和EBP。分別是267和263。

該程序需要我輸入「42」作爲第一個輸入,然後它會提示另一個問題,我可以讓A * 264溢出緩衝區。下面是我使用的有效載荷,它包括字符串42,一堆NOP底座(精確地爲263),保留EBP值,ESP內存偏移量(0xbffff480)以覆蓋EIP和我的shellcode。

http://pastebin.com/g4kK2pC8

我執行後上述,在gdb當我看到ESP和EIP的值是相同的,即0xbffff480

這是我已經把我的shellcode和EIP指向這一點。但是,爲什麼我的shellcode不能執行? 「程序接收到的信號SIGSEGV,分段故障」失敗。

我不知道我哪裏出錯了。所以我的指向/覆蓋EIP ESP值的想法是錯誤的?或者與我的shellcode有關?我如何編寫一個簡單的shellcode/payload來打印某些東西,或者只是檢查執行是否發生?

更新:

我用checksec.sh腳本來檢查二進制已啓用NX以下是我得到的輸出。

RELRO   STACK CANARY  NX   PIE    RPATH  RUNPATH  FILE 
Partial RELRO No canary found NX enabled No PIE   No RPATH No RUNPATH output 

這是否意味着我無法運行我的shellcode?我只需要關注避開/繞過NX? - 部分RELRO是否有所作爲?

+0

該二進制文件是否啓用了DEP或ASLR? – drum

+0

另外,你確定你有一個工作shellcode? – drum

+0

感謝@drum的快速回復。我如何檢查這些是否被啓用?另外,我如何測試我的shellcode,我使用msfpayload生成一個,我假設它的工作原理。 'code'msfpayload linux/x86/exec CMD =/bin/sh R | ' msfencode -b \ x00 \ xff -t c> shellcode – h4xorhead

回答

1

編輯:我只注意到你的checksec輸出,所以你需要編譯:

gcc -z execstack 

這很難不看在調試器中的內存,但問題可以是你的shellcode需要更多的空間來解碼自己。編碼的shellcode(我看你是用msfencode這樣做的),將需要在預期的有效載荷(在你的情況下linux/x86/exec)可以運行之前就地解碼。解碼過程通常會覆蓋其之前的一部分內存空間,所以如果沒有足夠的可寫空間可能會發生問題(即分段故障)。所以在下面的例子中,我們會看到解碼器覆蓋0x00000008以上的內存(appologies,如果這看起來沒什麼像你的緩衝區,因爲我不能從我的位置看到pastebin)。

0x0400001C 41 41 41 41 
0x04000018 41 41 41 41 
0x04000014 41 41 41 41 
0x04000010 41 41 41 41 
0x0400000C 55 55 55 55 <-- Return address 
0x04000008 12 34 56 78 <-- Start of shellcode 
0x04000004 90 12 34 56 
0x04000000 78 90 12 34 

嘗試用中斷(「\ XCC」)前面加上你的shellcode,然後通過GDB shellcode的步驟,看看它的發生。

然後,您可以嘗試在返回地址和shellcode的開頭之間添加一些NOP(「\ x90」)。我會建議從32開始。

讓我知道這是否看起來像問題。

相關問題