4

使用 C 程序评估一段示例 shellcode 并不复杂。它将涉及将 shellcode 存储在字符数组中,创建函数指针,类型转换指针并使其指向数组并调用函数(指针)。

这就是它的工作原理,假设您可以在以下位置执行内存nastycode[]

/* left harmless. Insert your own working example at your peril */
char nastycode[] = "\x00\x00\x00...";
void (*execute_ptr) (void);

execute_ptr = (void *)nastycode; /* point pointer at nasty code */
execute_ptr();                   /* execute it */

有什么方法可以使用 Python 代码做同样的事情吗?或者 Python 代码转换为字节码的事实是否使这样的努力变得不可能?

4

3 回答 3

4

可以做到这一点的唯一方法是如果您依赖 C 库。缓冲区溢出可以从它的库绑定中引入 python。出于您的目的,您可以用 c 编写自己的简单 python 库,并在Aleph One 的 Smashing the Stack for Fun and Profit中实现类似 example3.c 的东西。正如 Avilo 指出的那样,您将不得不担心 NX 区域,但是任何内存区域都可以再次执行,这是特定于平台的。此外,GCC 默认使用堆栈金丝雀。虽然这可以通过使用传递给函数的地址覆盖返回地址来避免,这将使罐头厂完好无损。ASLR 是一个很难绕过的非常好的安全系统,但是如果您将已知地址传递给您的 shell 代码,那么 ASLR 应该不是问题。

于 2011-02-19T20:27:58.023 回答
1

这就是你要找的东西;)

http://libemu.carnivore.it/

既然你在哪里寻找 python:

https://github.com/buffer/pylibemu

于 2014-03-17T20:53:40.017 回答
0

它可能在 python 中......你可以使用 ctypes 自己绑定到 C 或简单地使用像 distorm 这样的东西

http://code.google.com/p/distorm/wiki/Python

您可能还想看看 dionaea 是如何做到的。它是一个蜜罐,但它会测试 shellcode 并输出结果。

http://dionaea.carnivore.it/

于 2011-09-28T23:14:29.817 回答