首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 黑客知识 → 网管专题 → 文章内容

MS-07004分析和利用--MS-07004,分析,利用

作者:佚名  来源:网上收集  发布时间:2007-5-6 0:19:44
 

相信大家对去年的MS06-055还记忆犹新吧,微软的矢量标记语言VML中的Method变量IE未对其进行长度进行检查,导致了一个栈溢出漏洞。 2007年的新年钟声刚刚敲响,又一个关于VML的漏洞曝光了,CVMLRecolorinfo::InternalLoad() 中的recolorinfo 方法中存在整数溢出,milw0orm上国外有人第一时间公布了poc代码,无疑为我们的分析过程提供了方便,我们可以从二进制补丁对比中定位到了出现问题的代码,补丁中加了一个对eax检查的指令'cmp eax, 0x5d1745d',如图1:

图1
相关代码如下:

.text:6FF176A7 loc_6FF176A7: ; CODE XREF: sub_6FF17642+21j
.text:6FF176A7 mov eax, [esi+8]
.text:6FF176AA add eax, [esi+4]
.text:6FF176AD test eax, eax
.text:6FF176AF jle short loc_6FF176C4
.text:6FF176B1 imul eax, 2Ch
.text:6FF176B4 push 101h
.text:6FF176B9 push eax ; size_t
.text:6FF176BA call sub_6FECFEF4
.text:6FF176BF pop ecx
.text:6FF176C0 pop ecx
.text:6FF176C1 mov [esi+14h], eax
 
eax 是从html代码中得到的,由于32位寄存器所能表示数的范围是有限的,所以假如我们提交一个很大的数,那么乘以2Ch以后就反而变小了, 6FF176BA中的代码调用了malloc申请堆内存,所以这个漏洞本质上来说是因为整数溢出而间接导致了堆溢出,那么我们如何定位这一段代码呢?我们首先在OD中在上面这段代码中下硬断点,在命令行中输入he 7FF176AD,然后打开poc页面,很快OD断了下来,如图2:

图2
然后跟进6FECFEF4得到了malloc返回的指针003A8320,在这个地址上下写断点,hw 003A8320,断在处,如图3

图3
push 0B pop ecx和下面的rep movs这三条指令是将rgb(x,x,x)(参见后面的Exp)的颜色参数经过一定的算法(下文简称RGB算法)算出的结果拷贝到堆中,每次0B字节。 recolorinfo 中共有五个参数,分别是tocolor、lbcolor、forecolor、backcolor、fromcolor需要经过RGB算法得出,0B*5 =2C,我们可以猜测下面每个recolorinfoentry都会拷贝2C个字节到堆中,我们来看看OD下方的数据窗口来验证一下我们的猜测,果然是从 003A83FC处开始每2C(十进制的44)字节的数据都是重复的。然后我们按下F9键让IE跑起来,OD提示有异常,如图4:

图4
很明显某些函数指针被覆盖了,我们在内存中搜索6E006F00,在00010101的地方发现了这串序列,而00010101就是出现在堆内存中的数据,假如我们能将指针指向我们的shellcode,嘿嘿...如何利用呢?这个漏洞又和普通的堆溢出的利用方式有点不同,传统的堆溢出是通过二次Alloc 或Free改写RtlEnterCriticalSection 或者Unhandled Exception Filter等指针来获得代码的执行权,而IE里则可以通过一种“暴力扩张堆”的方法来获得代码执行权,就是连接成05050505+shellcode 这样的形式,堆是从低地址向高地址增长的,再看看堆中被我们覆盖的数据,假如我们call的不是[00010101]而是[01010100]那就正好跳转到了05050505这个地址,在一连串的Add eax,5050505h指令之后,这些指令是无关紧要的,最终跳入了我们的shellcode中执行,堆中的数据都是由recolorinfo 中的一些参数得到的,具体的算法我也没有细细的跟,头大啊,但rgb(x,x,x)的三个参数最终会直接决定函数指针的指向,网上公布的poc中rgb (1,1,1)生成的地址是00010101。另外这个漏洞因机子而异不会有100%的成功率,相信看到现在读者朋友也该明白是什么原因。然后我们把 shellcode换成自己的down&exec的,关于怎么写shellcode大家可以翻翻黑防以前的文章。但是有一点就是记得前面要加4个 nop,否则可能出现失败的情况,因为连续的050505会破坏你的shellcode,需要几个nop缓冲一下,害我郁闷好一阵子,汗...我在中文 xp SP2 + IE6下测试成功了,测试的代码如下,测试结果如图5:

相关代码查看: article_1066_code.txt
另外,为了方便黑防读者的测试,我写了一个生成器,填充的是down&exec的Shellcode,填入要下载的程序的网址点生成即可,假如一切顺利,程序将会被执行,希望大家不要用于非法用途啊!需要扩展功能的自己可以改shellcode,通过更改RGB算法中的三个参数可以更加精确的定位 shellcode,假如读者朋友有什么好的思路或者方法,一定要告诉大家啊,另外javascript加密可以躲过杀毒软件的追杀,瑞星卡卡有个防漏墙功能可以阻止IE执行代码,在一定程度上确实让相当一部分网马没辙了,在这里也推荐广大网民使用,以免中招,但世界上没有不透风的墙,假如我们在 shellcode中将代码注入其他进程下载执行那么防漏墙就形同虚设了.
 
[] [返回上一页] [打 印]
  • 上一篇文章:WinRAR 7z压缩包处理溢出分析和利用--WinRAR 7z,压缩包处理,溢出,分析,利用
  • 下一篇文章:卡巴斯基6.0安全防护机制的相关分析--卡巴斯基,安全,防护机制,相关分析

  • 相关文章:
  • MS-06070源代码--MS-06070,源代码
  • [组图]QQ Traveler漏洞分析与利用(0day)--QQ,Travel...
  • [组图]MS-07004分析和利用--MS-07004,分析,利用
  • WinRAR 7z压缩包处理溢出分析和利用--WinRAR 7z,压缩...
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号