Shellcode没有运行

我试图通过C程序运行很多shell代码来测试它们。 这里是

#include #include unsigned char code[] = "shell here"; main() { printf("Shellcode Length: %d\n", strlen(code)); int (*ret)() = (int(*)())code; ret(); } 

这是shellcode的例子

 "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb"\ "\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89"\ "\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd"\ "\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f"\ "\x73\x68\x58\x41\x41\x41\x41\x42\x42\x42\x42" 

(\ bin \ cat \ etc \ shadow)运行后

gcc sctest.c -o out ./out

它只是给我shellcode长度和分段错误我已经尝试了很多不同的shellcode但是一切只是给了我段错误我的dmesg | tail -1 [18440.783383] test [8768]:segfault at 8049700 ip 08049700 sp bffff2ec error 15 in test [8049000 + 1000]我的shellcode出了什么问题?

在禁用NX-bit和randomize_va_space等其他东西之后我终于完成了它。

首先,您应该使用键-z execstack和-fno-stack-protector编译可执行文件。

之后禁用ASLR echo 0> / proc / sys / kernel / randomize_va_space。 现在你必须找到shellcode。 你可以试试mspayload或msfvenom。 Shellcode是一个字节码,通常会给你shell。

在该步骤中,您应该找到堆栈溢出的偏移量。 你可以尝试找到像这样的行

 sub hex-offset, %esp 

或者您可以尝试使用简单的脚本来强制执行它,例如./your_binary

在找到偏移量(发生SEGFAULT并且dmesg | tail -1表示%eip为0x41414141)之后,您只需要编写漏洞。 它的结构看起来像那样

 NOPs(no operation)*x+shellcode+return-address(4 bytes)*y 

len(shellcode)+ x + 4y =你的偏移量返回地址是你的NOP所在堆栈中的地址的地址(在输入之前你在gdb info r中看到的%esp的地址)

并且不要忘记,如果没有gdb,在gdb中工作的漏洞将无法工作,因为您需要从返回地址添加/减去36个字节。

最后你准备开发了

 ./your_binary < exploit.bin