使用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代码转换为字节码的事实是否使得这样的努力变得不可能?
答案 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并输出结果。
答案 2 :(得分:0)