为什么shellcode不起作用?

时间:2011-12-03 19:31:45

标签: security redhat buffer-overflow shellcode

我正在尝试进行缓冲流程漏洞利用演示。我想使用shell代码溢出堆栈并获得sh会话。我可以按照这里的教程http://www.shell-storm.org/papers/files/432.pdf来生成完全相同的shellcode。但是我无法像在教程中那样使用shellcode3.c运行shellcode。我得到的总是“分段错误”。

我正在使用“Red Hat Enterprise Linux AS第4版(Nahant Update 4)”。

我想知道是否有人使用类似方法使其工作?我需要换到其他系统吗?

3 个答案:

答案 0 :(得分:1)

分段错误意味着您确实溢出了堆栈并触发了崩溃;你需要为EIP找到正确的偏移量并将你的shellcode放在那里。如果您确信将shellcode放在正确的位置,可以随时使用Metasploit生成shellcode以满足您的需求。您还必须确保关闭现代Linux版本中默认打开的各种堆栈溢出保护。谷歌会告诉你任何你需要知道的事情。你看过http://www.corelan.be了吗?它适用于Windows漏洞利用开发,但它是一个很好的起点。

答案 1 :(得分:1)

您使用的Linux是一个重要因素;对于不同的操作系统,堆栈的整个结构会有所不同。 一个好的shell代码不能包含Null字节,这将停止在缓冲区中执行代码。

  

“\ xeb \ x1f \ x5e \ x89 \ x76 \ x08 \ x31 \ xc0 \ x88 \ x46 \ x07 \ x89 \ x46 \ x0c \ xb0 \ x0b \ x89 \ xf3 \ x8d \ x4e \ x08 \ x8d \ x56 \ x0c \ xcd \ x80 \ x31 \ xdb \ x89 \ xd8 \ x40 \ xcd \ x80 \ xe8 \ xdc \ xff \ xff \ xff / bin / sh“

上面是一个很好的shellcode,只有46个字节。 该站点将帮助您找到有关您的Red-hat堆栈的结构和其他信息 你还必须通过使用'gcc -fno-stack-protector -o out test.c'来禁用所有类型的堆栈保护,例如execstack,Stack canaries。

答案 2 :(得分:0)

似乎你因为发生了分段错误而覆盖了堆栈。使用像gdb这样的调试器来查找EIP寄存器的确切内容和shellcode的地址。他们应该匹配。试着弄清楚跳跃的位置和应该在哪里。这会给你一个更好的主意。