百度空间 | 百度首页 
               
 
查看文章
 
公开个Nday(ms08-046)
2008-09-04 14:45

    公司前期花大半年时间搞的一个项目算是彻底泡汤了,几十W真金白银如数打了水漂,基本上泡泡都没冒一个,新任务下来了,居然叫我整理基于CVE的入侵检测库,唉.

    劳骚到此为止,说正题,08046估计国内很多小牛大牛搞出来了.最早知道有这么个洞大约是在今年三四月份,听某牛man说有个系统默认支持的图片格式的洞,结果四月份出了个MS08-021,POC也有公开的,当时以为传言指的就是这两个"鸡肋".没想到8月份MS又出了MS08-046,分析过程如下:

    先认真看了一遍MS的公告,从公告中可以知道文件格式是EMF,出错模块是MSCMS,具体有漏洞的地方和ICC文件有关系.这样看来PoC应该和MS08-021有点类似.

    然后是补丁比较,由于MSCMS模块只有80KB,很快就可以找到出错函数名为OpenColorProfileW,分析出错函数虽然我没有看出有明显的溢出,但知道了该函数主要是通过一个传递过来的文件名(文件名长度要小于104h),在文件名前面补上一个系统目录后再打开这个文件.同时补丁后的功能在处理文件名的时候对长度做了一些处理,所以估计为ICC文件名长度超长所造成的溢出.

    第三步构造POC,由于有分析MS08-021的经验,我知道在EMF文件中与ICC文件名相关的Recoder只有几个,在MSDN中都可以搜到,于是写了个GUI程序,然后依次调用GetDC,GetClientRect,CreateEnhMetaFile,SetICMProfileA,CloseEnhMetaFile,ReleaseDC等API构造了一个模版,然后在OpenColorProfileW入口处下断点,就发现在处理SetICMProfileA这个API函数所生成的EMR_SETICMPROFILEA记录时可以走到断点处.但是并不会走到出错的代码块,分析了一下代码流层原来所传入的文件名一是不能超过104h二是文件名的开头必须要以http://开头(怪不得分析08021的时候没找到这个洞).

   该写EXP了,由于构造出了POC,也就很容易的发现了出错原理为:在分配存放文件名和路径的内存的时候计算长度是用的lstrlenW,所以造成分配的内存空间只有实际COPY数据的一半,这样就覆盖了后面的堆管理结构及其它一些数据.到这儿漏洞已经可以定性了,就是一个比较标准的堆溢出,在后面的释放或是合并这个堆的时候会造出指针互写的错误,当然由于XPSP2所增加的安全机制,造成这个洞很难利用.不过在IE中有时异常会发生在call [ecx+xx]或是mov ecx,[eax](后面是call [ecx+xx]),而ECX,EAX为我们传入的文件名转换为UNICODE后的值.再次调试分析后发现:超长串所覆盖的数据中有时会是一个函数指针,而在这个堆释放或是合并之前就会引用这个函数指针.所以一种可能的利用方法就是在IE中用HEAP SPRAY的方法和该漏洞结合.EMF文件中填充的字符串为0040007X(另外为了增大覆盖函数指针的机率你还可以多加几个有超长文件名的记录),或是用JAVA分配内存填充数据为2xXXXXXX.

POC附图:


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (42)
 
最近读者:
 
网友评论:
1
2008-09-04 14:49 | 回复
只是POC.路过.
 
2
2008-09-04 15:22 | 回复
兄弟,这个poc很不错了,你还想啥子哦。相比:TK的:机缘巧合,可能大方了。
 
3
2008-09-04 15:47 | 回复
0x557的粉丝?
 
4
2008-09-04 15:51 | 回复
我怀凝这个BLOG是dm的马甲
 
5
2008-09-04 15:54 | 回复
楼上不要乱猜测,怎么可能是我。
 
6
2008-09-04 15:58 | 回复
1.这个贴子发出来不到十分钟,我就看到你在看,应该没这么巧合吧. 2.文章里面的图片里面有个0x557,也就是SST和你的头象一样的. 3.你的BLOG上也有分析这个洞的文章. 以上三条总结出来就是你和此BLOG必有很大的联系,怀凝这人是你的马甲 不过分吧.
 
7
2008-09-04 16:02 | 回复
难道:DM就是传说中周伯通类型的:可以左右手互搏的人,先拜一个
 
8
2008-09-04 16:05 | 回复
6楼分析的有道理 爆料了,wordexp现在另接新欢,不是:czy就是我,是漏洞大师:DM
 
9
2008-09-04 16:17 | 回复
莫非OO7....内部....又有料私下流出...
 
10
2008-09-04 16:25 | 回复
1.这个贴子发出来不到十分钟,我就看到你在看,应该没这么巧合吧. 0x557 IRC里面有rss的机器人,5分钟更新一次,看到了就自然而然的点开了。 2.文章里面的图片里面有个0x557,也就是SST和你的头象一样的. 0x557里面高人不少,能做这个的人很多,至于楼主的样本为啥有0x557字样我也很好奇。 3.你的BLOG上也有分析这个洞的文章. 那次纯粹是呼应一下tk,你这么说,下次我可不敢发了。
 
11
2008-09-04 16:27 | 回复
太无聊了,引来一堆无聊猜测,说不定正中作者恶意的下怀,这个blog跟0x557没啥关系,估计唯一的关系就是irc里面的机器人收集了这个rss,dm赶紧删了rss,把这关系断了吧
 
12
2008-09-04 16:29 | 回复
我是来打酱油的。
 
13
2008-09-04 16:30 | 回复
9楼是谁,冒用我的马甲,难道是我的粉丝吗
 
14
2008-09-04 16:32 | 回复
这八卦扯得可够远的.
 
15
2008-09-04 16:38 | 回复
正赶上聊天 我插个足!
 
16
2008-09-04 16:44 | 回复
偶也是来打酱油的....
 
17
2008-09-04 16:44 | 回复
二是文件名的开头必须要以http://开头 看来你还是没明白为啥"http://"会触发这个漏洞,只是歪打正着而已 "http://"不是触发漏洞的必要条件
 
18
2008-09-04 16:47 | 回复
其实只要0x3A就行了
 
19
2008-09-04 16:48 | 回复
路过 T.T
 
20
2008-09-04 16:50 | 回复
lz神秘感还要保持多久哇?嘿嘿
 
21
2008-09-04 16:51 | 回复
终于有人来揭示问题真相了。
 
22
2008-09-04 16:51 | 回复
看来,真是全国人民都在调试这个漏洞啊,回答的这么快,wordexp,你把他公布出来,是让全国exp人民,在这周都没有活干了啊
 
23
2008-09-04 17:07 | 回复
其实,只要不含\,同时又包含:,就可以走错误流程
 
24
2008-09-04 17:08 | 回复
wordexp,不会就是xiaoqiang吧,这小子留标记了
 
25
2008-09-04 18:13 | 回复
打酱油啊
 
26
2008-09-04 20:02 | 回复
一群呆B在这里歪歪叽叽。。
 
27
2008-09-04 20:59 | 回复
凑个热闹.....
 
28
2008-09-04 21:38 | 回复
楼上很多大牛的马甲潜水八卦
 
29
2008-09-04 23:26 | 回复
poc没用,要exploit
 
30
2008-09-05 08:27 | 回复
.......
 
31
2008-09-05 13:09 | 回复
赶紧凑热闹 去银行值了两天班 都跟不上时代了
 
32
2008-09-05 14:02 | 回复
难怪DM跑出来后WORDEXP就没有露面了,果然是马甲~~~~~~
 
33
2008-09-05 17:35 | 回复
wordexp和楼上都是我的马甲,没事左右互搏多好玩啊。
 
34
2008-09-05 21:45 | 回复
陈至义?莫非就是czy??? 楼主?我看不像
 
35
2008-09-06 00:17 | 回复
不是我
 
36
2008-09-06 00:49 | 回复
连退隐江湖多年的:scz出现了。 wordexp,who are you?
 
37
2008-09-06 10:22 | 回复
其实很简单,wordexp就是czy。 怎么证明呢? 如果czy敢自己登录上来,发个毒誓,说“如果我czy是wordexp,日后出门必被车撞死!”就可以了,从此czy就跟wordexp没关系了。 反之如果不敢,他tm就是。装b啊
 
38
2008-09-06 11:36 | 回复
兄弟,你这也太过分了,可以断定你也高尚不到那里去。人家装B也好,低调也好,管你什么事情啊,人家肯共享技术,我们就很欢迎,我们觉得就觉得装B无罪。
 
39
2008-09-07 10:38 | 回复
在程序里我知道怎么触发,在WEB里不知道怎么触发
 
40
2008-09-07 11:29 | 回复
好多马甲啊-_-
 
41
2008-09-15 18:09 | 回复
谢谢大牛无私分享,鄙视某些人得了便宜还红眼的行为
 
42
2008-11-21 17:25 | 回复
看 不懂 你们说的啥啊 ? 好像我是打醋的。。。。。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu