2017/4/20

来源:互联网 发布:家庭影院网络播放器 编辑:程序博客网 时间:2024/05/21 06:47

Python code object的逆向:

生成codeobject的方法是可以通过compile生成:

code_str = """def hello():\n    print"hello,world\\n"\nimport hashlib\nhashlib.sha1()\nhello()"""code_obj = compile(code_str, '<string>', 'exec')dis.dis(code_obj)exec(code_obj)


Python的code object的逆向通过执行dis.dis()来实现,得到的是可以基本读懂的类似于汇编的代码。Codeobject反汇编的内容会出现load code object的字段应该是说明原函数里应该是有自定义的函数。如何查看自定义的函数内容还没有头绪。

另外所做的题目中使用的是marshal.loads()函数,参数是一个乱码的字符串,生成了一个codeobject,至于,marshal模块,先存疑。日后解答。

         有关于缓冲区溢出漏洞的,如果利用到了cookie检测技术的防止栈溢出的话,我们可以采用溢出异常函数处理的方式进行,但是异常处理函数的话会有SEH保护,但是SEH保护的特点是,如果异常处理函数的地址和储存的的地址不匹配的话不是绝对不执行,如果这个地址指向的是本程序加载模块以外的内容的话还是可以执行的。这时候,有一位大神发现了在windows2003下svchost.exe总是会将UNICODE.lns加载到0x001a0000处,而在偏移0x10b0b处是一条call dword ptr [EBP+30]指令,而EBP会在shellcode的附近,我么可以把异常处理函数地址覆盖成0x001b0b0b,然后就能够通过覆盖cookie触发异常,通过绕过异常处理函数检查跳转到我们的shellcode最终得到执行。不得不感叹,真是防不胜防。

0 0
原创粉丝点击