2

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

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

我想知道有没有人用类似的方法让它工作?需要换其他系统吗?

4

3 回答 3

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、堆栈金丝雀。 '

于 2012-01-21T04:36:33.883 回答
1

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

于 2011-12-03T22:18:56.907 回答
0

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

于 2011-12-05T19:29:26.337 回答