在python中评估shellcode的方法?

时间:2011-02-19 19:05:52

标签: python c security shellcode

使用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代码转换为字节码的事实是否使得这样的努力变得不可能?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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

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

http://dionaea.carnivore.it/

答案 2 :(得分:0)

这就是你要找的东西;)

http://libemu.carnivore.it/

因为你在哪里寻找python:

https://github.com/buffer/pylibemu