[Ph4nt0m Security Team] [Exploit][MSA01110707] Flash Player/Plugin Video file...

10 views
Skip to first unread message

* Ph4nt0m Security Team *

unread,
Jul 15, 2007, 10:07:14 PM7/15/07
to ph4...@googlegroups.com
Author:云舒(yunshu)
2007-07-16
http://www.ph4nt0m.org

这个漏洞的分析是在这里:http://seclists.org/fulldisclosure/2007/Jul/0277.html,luoluo做出了一个POC,晚上有空,我跟了一下,郁闷的很,在这里简单的说说。我用的是Flash player 9.0.45.0,winxp sp2中文版。

看了分析之后,就开始跟luoluo给的POC,第一次异常发生在这里:
3019CE18 C1E9 02 SHR ECX,2
3019CE1B 83E2
03 AND EDX,3
3019CE1E 83F9
08 CMP ECX,8
3019CE21
72 29 JB SHORT Flash9c.3019CE4C
3019CE23 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]


随后我慢慢耐心的用shift+ f7一步一步的往下走,一直走到头晕眼花的时候,终于到了这样一个有意思的地方:
300ED77D 85C9 TEST ECX,ECX
300ED77F 0F84
00070000 JE Flash9c.300EDE85
300ED785 8B01 MOV EAX,DWORD PTR DS:[ECX]
300ED787 FF50
20 CALL DWORD PTR DS:[EAX+20]


先判断ECX是否为空,不空则把ECX处的内容赋给EAX,然后call。这样如果[ECX]可控的话,就有可能能够利用了。仔细试了几次,发现 [ECX]几乎每次都不一样,但是可以确定的是,[ecx]是flv文件内的内容。一怒之下,我把开头除了文件头的格式之外的所有内容都改成了01。一跟,运气很好,蒙对了,[ECX]变成了0x01010101,也就是说下一步要执行的内容我们可以控制了。但是现在问题是,我把我的shellcode 放到哪里去了?如果把文件的内容改成shellcode,[ECX]不可控了;[ECX]一定可控,则shellcode没地方放了。

在EMM的提醒下,尝试用HeapSpray来做,可惜还是可耻的失败了。HeapSpray之后,[ECX]变了,没法控制到下一步CALL的位置……或许这个漏洞的利用办法还是把shellcode放到文件中某个特殊的位置吧,加长文件或许可以。困得不行,睡觉先。附件这个rar是控制EAX 的POC,有兴趣的看看吧。

附件:flv_9.0.45.0.rar

--
由 * Ph4nt0m Security Team * 于 7/15/2007 07:00:00 下午 在 Ph4nt0m Security Team 上发表

云舒

unread,
Jul 15, 2007, 10:21:12 PM7/15/07
to ph4...@googlegroups.com
我认为通过严格的控制执行顺序,是可以执行到shellcode的。前几天测试,是因为先加载了flv,然后再执行的HeapSpray,导致本来被控制了的
ecx被改变了。如果用JS控制执行顺序,先HeapSpray,然后再加载flv,我估计有90%的希望能成功。
 

云舒
2007-07-16

发件人: * Ph4nt0m Security Team *
发送时间: 2007-07-16 10:07:28
抄送:
主题: [Ph4nt0m] [Ph4nt0m Security Team] [Exploit][MSA01110707] FlashPlayer/Plugin Video file...
 
Author:云舒(yunshu)
2007-07-16
http://www.ph4nt0m.org

这个漏洞的分析是在这里:http://seclists.org/fulldisclosure/2007/Jul/0277.html,luoluo做出了一个POC,晚上有空,我跟了一下,郁闷的很,在这里简单的说说。我用的是Flash player 9.0.45.0,winxp sp2中文版。

看了分析之后,就开始跟luoluo给的POC,第一次异常发生在这里:
3019CE18 C1E9 02 SHR ECX,2
3019CE1B 83E2
03 AND EDX,3
3019CE1E 83F9
08 CMP ECX,8
3019CE21
72 29 JB SHORT Flash9c.3019CE4C
3019CE23 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]


随后我慢慢耐心的用shift+ f7一步一步的往下走,一直走到头晕眼花的时候,终于到了这样一个有意思的地方:
300ED77D 85C9 TEST ECX,ECX
300ED77F 0F84
00070000 JE Flash9c.300EDE85
300ED785 8B01 MOV EAX,DWORD PTR DS:[ECX]
300ED787 FF50
20 CALL DWORD PTR DS:[EAX+20]


先判断ECX是否为空,不空则把ECX处的内容赋给EAX,然后call。这样如果[ECX]可控的话,就有可能能够利用了。仔细试了几次,发现 [ECX]几乎每次都不一样,但是可以确定的是,[ecx]是flv文件内的内容。一怒之下,我把开头除了文件头的格式之外的所有内容都改成了01。一跟,运气很好,蒙对了,[ECX]变成了0x01010101,也就是说下一步要执行的内容我们可以控制了。但是现在问题是,我把我的shellcode 放到哪里去了?如果把文件的内容改成shellcode,[ECX]不可控了;[ECX]一定可控,则shellcode没地方放了。

在EMM的提醒下,尝试用HeapSpray来做,可惜还是可耻的失败了。HeapSpray之后,[ECX]变了,没法控制到下一步CALL的位置......或许这个漏洞的利用办法还是把shellcode放到文件中某个特殊的位置吧,加长文件或许可以。困得不行,睡觉先。附件这个rar是控制EAX 的POC,有兴趣的看看吧。

Maizero

unread,
Jul 15, 2007, 10:53:50 PM7/15/07
to ph4...@googlegroups.com
期待继续讨论……

云舒

unread,
Jul 16, 2007, 9:13:21 PM7/16/07
to ph4...@googlegroups.com
新的一篇我放到这里了,http://www.icylife.net/yunshu/show.php?id=448
 
今天下午把前天晚上没继续的这个漏洞继续看了一下,其实主要是验证一个想法。那天我粗略的尝试了一下Heap Spray来执行shellcode,但是失败了。因为Heap Spray修改了ECX寄存器,导致虽然推高覆盖了内存,但是无法将CALL [ EAX+20 ]指到控制的这块内存之内。

今天下午就试着先HeapSpray填充内存,我用的0c0c0c0c做的。这个时候ECX是不确定的,因此EAX也是不确定的。不过这个不要紧,因为后面的操作。HeapSpray完成之后再加载FLV文件,这个时候前面不确定的ECX就会被这个畸形的FLV文件内容覆盖,我用的也是0c0c0c0c,这样EAX就变成了0c0c0c0c了。前面我已经覆盖了大片连续内存,因此CALL [ EAX+20 ]也落在其中,call到了0x0c0c0c0c,而这个时候0x0c0c0c0c处存放的内容也是0c0c0c0c,因此,最终会跳到0x0c0c0c0c地址执行,一路没用的指令下来,乖乖的落入到了shellcode中。

附件是一个POC,有兴趣的可以调试看看。比较郁闷的是,我测试的结果似乎是不能多次重复溢出的。可能在3-5次之后,就控制不到ECX了,也就是说控制不到EAX+20了。顺便,我用的是9.0.45.0版本的控件。
相关附件:flash_flv_9.0.45.0_exp.zip (1.92 K)
该附件被下载次数:31
 

云舒
2007-07-17

发件人: Maizero
发送时间: 2007-07-16 10:54:02
抄送:
主题: [Ph4nt0m] Re: [Ph4nt0m Security Team] [Exploit][MSA01110707]FlashPlayer/Plugin Video file...
 
期待继续讨论......

noop

unread,
Jul 16, 2007, 11:10:54 PM7/16/07
to Ph4nt0m
只有先heapspray的,特别是一些更老的版本上,我觉得你读取畸形得flv的时候,其实读了heapspray的0c0c0c0c,最后才使得
ecx得以控制,应该还有更精准的控制方法吧,期待大牛出手。

On 7月17日, 上午9时13分, "云舒" <ph4nt0m.yun...@gmail.com> wrote:
> 新的一篇我放到这里了,http://www.icylife.net/yunshu/show.php?id=448
>
> 今天下午把前天晚上没继续的这个漏洞继续看了一下,其实主要是验证一个想法。那天我粗略的尝试了一下Heap Spray来执行shellcode,但是失败了。因为Heap Spray修改了ECX寄存器,导致虽然推高覆盖了内存,但是无法将CALL [ EAX+20 ]指到控制的这块内存之内。
>
> 今天下午就试着先HeapSpray填充内存,我用的0c0c0c0c做的。这个时候ECX是不确定的,因此EAX也是不确定的。不过这个不要紧,因为后面的操作。HeapSpray完成之后再加载FLV文件,这个时候前面不确定的ECX就会被这个畸形的FLV文件内容覆盖,我用的也是0c0c0c0c,这样EAX就变成了0c0c0c0c了。前面我已经覆盖了大片连续内存,因此CALL [ EAX+20 ]也落在其中,call到了0x0c0c0c0c,而这个时候0x0c0c0c0c处存放的内容也是0c0c0c0c,因此,最终会跳到0x0c0c0c0c地址执行,一路没用的指令下来,乖乖的落入到了shellcode中。
>
> 附件是一个POC,有兴趣的可以调试看看。比较郁闷的是,我测试的结果似乎是不能多次重复溢出的。可能在3-5次之后,就控制不到ECX了,也就是说控制不到EAX+20了。顺便,我用的是9.0.45.0版本的控件。
> 相关附件:flash_flv_9.0.45.0_exp.zip (1.92 K)
> 该附件被下载次数:31
>

> 云舒
> 2007-07-17
> Blog:http://www.icylife.net
>

云舒

unread,
Jul 16, 2007, 11:15:46 PM7/16/07
to ph4...@googlegroups.com
不是这样的,ECX是读的FLV文件里面的,你自己仔细跟一下就明白了。
你把HeapSpray去掉,ECX一样是可控的。
或许可以精确控制,不过我懒得去搞了。
 

云舒
2007-07-17

发件人: noop
发送时间: 2007-07-17 11:11:15
收件人: Ph4nt0m

gyzy

unread,
Jul 17, 2007, 1:11:55 AM7/17/07
to ph4...@googlegroups.com
我跟踪的ecx指向的是flv 的tags里面,没有被0x0c0c0c0c覆盖。而且上传到空间里再访问连dos都不行了,

云舒

unread,
Jul 17, 2007, 1:13:45 AM7/17/07
to ph4...@googlegroups.com
那你可以把那个tag也用0c来写掉。版本不同,这里有点不一样,我那个没写tag那里。
 

云舒
2007-07-17

发件人: gyzy
发送时间: 2007-07-17 13:12:34
抄送:
主题: [Ph4nt0m] Re: [Ph4nt0m SecurityTeam][Exploit][MSA01110707]FlashPlayer/Plugin Video file...

大风

unread,
Jul 17, 2007, 1:30:27 AM7/17/07
to ph4...@googlegroups.com

看到很多人来回这个贴,我也来re一下,其实昨天在群里跟MJJ讨论了很久,今天又跟noop讨论了下,我就费时间整理了,直接把我和noop讨论的记录贴出来。Noop兄勿见怪.

 

 

noop 这次得漏洞有点意思,呵呵

noop 你最后有啥问题?

axis OD里执行shellcode是正常的

axis 出来执行就ie报错

axis shellcode也不执行了

axis 你呢?

noop 你用得云MM那个么?

noop exp

axis 是的,差不多的

noop 这个溢出对环境依赖很严重。。

axis 啥环境啊

noop 内存

axis 为啥

noop 你仔细跟了不

axis 没细跟啊,就跟到异常跳转啊

axis 你还仔细看了反汇编代码的?

axis 你说的内存是指神恶魔

axis 什么

noop 要先用heapspray填充。

axis

axis heap spray跟漏洞无关

noop 就是因为这个影响成功率把?

axis 不是

axis 我说的不是这个

axis 而是我在实际环境中根本无法成功

axis 但是在ODli可以

axis 我猜有几点

noop 恩。说

axis 一是可能heap spray分配内存太慢了

noop

axis 还没分配好,漏洞就触发了

axis 这个你有办法解决不

noop sleep

noop 呵呵

axis 代码咋写?

noop 我也是昨晚看了下,今天跟云MM讨论了一下。

noop 先分配内存,然后sleep

noop 然后再触发

axis 怎么sleep 你测试了?

axis setTimeout是不行的

axis 以前我测试过

axis 这个是非阻塞的

noop 没测试呢,想法ing,我一直以为那个可行呢。

axis 我的想法是增加很多消耗cpu的事件,这样实际上可以延迟漏洞触发

axis 不行的,以前调试07-004的时候我就测试过了

noop 那只能找点其它时间让内存慢慢分配

axis 我昨天就跟MJJ说过了,他没告诉你吗

noop 没有

axis

noop 还有就是。

noop 想办法减少内存分配

noop 也可以

axis 其实还有个办法,不过通用性没heap spray这么好

axis 其实是可以精确控制ecx

axis 我精确控制了

noop 哦?怎么精确控制?

axis 但是可以写shellcodebuffer太小了,我还没找到其他更大的地方写更多的shellcode,不过我相信是可以解决的

axis 这个是文件类型的漏洞

axis 不是ie

noop 是阿

axis 所以完全可以精确控制ecx

axis 我在我的版本上找到那个offset

axis 但是云舒的版本上好像地方和我不一样

axis 所以我说通用性没heap spray

noop 嗯。我也发现不同版本不同

axis 我就没继续用这个方法了

axis 我现在就是担心不是因为内存没分配的原因才导致实际环境中溢出失败

axis 而是seh的问题,导致进程直接结束

axis 没运行shellcode就结束了

axis 我跟过seh

noop 如何?

axis seh链尾都执行过了,才到那个指针

axis 我估计是退出了线程啥的

axis 要验证这个也很简单

axis ie crash的时候,看能否想办法生成个dump文件

axis 看看dump文件里面是否生成了内存就知道了

noop 这是个办法。。

axis 咋生成dump文件知道不?

axis 我不知道咋生成

noop 我正想问你呢

axis 汗。。

axis 呵呵

axis 我只知道系统crash的时候会有

axis 进程crash好像没有的

axis 还是linux方便啊

axis 不晓得有没有第三方工具可以生成

noop 得找找看,可能有人写这种东西

noop 你精确控制ecxoffset是啥?

axis 问问dm

axis 我版本是 9.0.28

noop 恩。我现在虚拟机也是这个版本

noop MM那个版本我也测试国

noop 会抛出异常的。。。

noop 进程结束

axis 00000000h: 46 4C 56 01 05 00 00 00 09 00 00 00 00 12 00 00 ; FLV.............

axis 00000010h: 7C 00 00 00 00 00 00 00 02 00 0A 6F 6E 4D 65 74 ; |..........onMet

axis 00000020h: 61 44 61 64 61 0C FF FF FF FF FF FF 77 69 64 74 ; aDada.widt

axis 00000030h: 68 00 40 78 00 00 00 00 00 00 00 06 0C 0C 0C 0C ; h.@x............

axis 00000040h: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 21 42 43 44 0C 0C ; ..........!BCD..

axis 00000050h: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ; ................

axis 里面 21 42 43 44 就是精确控制ecx

axis 然后 call [eax+20h]

axis 就是 call [44434241]

axis 这个进程结束是这样的

axis 你必须要跟seh

axis 你在seh慢慢下断,一路跟过去就知道咋回事了

noop 我去看看

axis 直接好像我这里也是进程结束

axis 但是你慢慢跟就会发现,其实不会结束

noop 其实还是执行了。

axis 还有,用我的这个头文件

axis 不要用MJJ

noop 你这个头跟那个头有区别?

noop 哦。。。

noop

 

 

 

 

[Ph4nt0m]

[Ph4nt0m Security Team]

                  @ph4nt0m

          Email:  ax...@ph4nt0m.org

          PingMe:

          === Ultimate Hacking ===

          === XPLOITZ ! ===

          === #_# ===

#If you brave,there is nothing you cannot achieve.#

 

 

 


发件人: ph4nt0m@googlegroups.com [mailto:ph4nt0m@googlegroups.com] 代表 云舒
发送时间: 2007年7月17 13:14
收件人: ph4nt0m@googlegroups.com

主题: [Ph4nt0m] Re: [Ph4nt0m SecurityTeam][Exploit][MSA01110707]FlashPlayer/Plugin Video file...

 

那你可以把那个tag也用0c来写掉。版本不同,这里有点不一样,我那个没写tag那里。

 


云舒

2007-07-17


发件人: gyzy

发送时间: 2007-07-17 13:12:34

收件人: ph4nt0m@googlegroups.com


<BR
size=3 face=宋体>

云舒

unread,
Jul 17, 2007, 4:31:49 AM7/17/07
to ph4...@googlegroups.com
支持一下,呵呵。
不过偶没看见noop啊……汗
这个鬼东西很烦躁,我都懒得搞了,后来。
忙着改写一个PERL程序去了,还是搞这个PERL好玩。
这几天好像漏洞不少啊,我一个都没跟了,.NET的,QuickTime的,Symantec的等等……
 

云舒
2007-07-17

发件人: 大风
发送时间: 2007-07-17 13:31:05
抄送:
主题: [Ph4nt0m]_答复:_[Ph4nt0m]_Re:_[Ph4nt0m_SecurityTeam][Exploit][MSA01110707]FlashPlayer/Plugin_Video_file...
 
--~--~---------~--~----~------------~-------~--~----~
 要向邮件组发送邮件,请发到 ph4...@googlegroups.com
 要退订此邮件,请发邮件至 ph4nt0m-u...@googlegroups.com
-~----------~----~----~----~------~----~------~--~---
Reply all
Reply to author
Forward
0 new messages