在創建這篇文章之前,我試過並閱讀了以前的所有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。
我執行後上述,在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是否有所作爲?
該二進制文件是否啓用了DEP或ASLR? – drum
另外,你確定你有一個工作shellcode? – drum
感謝@drum的快速回復。我如何檢查這些是否被啓用?另外,我如何測試我的shellcode,我使用msfpayload生成一個,我假設它的工作原理。 'code'msfpayload linux/x86/exec CMD =/bin/sh R | ' msfencode -b \ x00 \ xff -t c> shellcode – h4xorhead