CVE-2010-0249(极光)分析报告

Posted jf-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CVE-2010-0249(极光)分析报告相关的知识,希望对你有一定的参考价值。

2019/9/10          报告doc在文件里面

1.    发现可疑流量

A.分析流量,导出字节流

 技术图片

 

 

 

 

B.得到网页代码,发现需要执行的代码需要解密(加密的字符串部分太长了,就省略了):

 技术图片

 

 

 

    C.通过在网页下断点,将解密后的代码从提取出来,并做修饰(payLoad太长被省略):

 技术图片

 

 

 技术图片

    很明显能看出来,这是在进行堆喷射!应该是在利用漏洞,至于漏洞在哪里,继续分析。

2.    漏洞复现

A.使用phpStudy构建网站,在xp虚拟机中用ie6访问

 技术图片

 

 

 

 

 崩掉了:

 

 技术图片

 

 

 

B.调试

 技术图片

 

 技术图片

 

进行栈回溯

 技术图片

 

技术图片

 

 

 

通过栈回溯:ecx来源于[esi],拖入OD调试一下

 技术图片

 

 

 

可以看出,ecx = [[[ebp-8]]],这个函数是mshtml.dll中的,把mshtml.dll拖入IDA看一下。

 技术图片

 

 

 

这个函数的参数是一个对象的二级指针

 技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 

继续溯源

 技术图片

找到上一个函数

 技术图片

 

 

 技术图片

C.根源

①到这里需要知道事件对象是如何创建和保存的,前面已经知道html中创建了一个image对象,对CImgElement下断点在windbg中输入bu mshtml!CImgElement::CImgElement

 技术图片

 

 

 

ecx(01c6cd20)即创造的CImageElement对象指针。

②在CTreeNode下断点

 技术图片

 

 

 

ecx(01cb04b0)即创造的CTreeNode对象指针。

 技术图片

 

 

 

CTreeNode::SetElement将该CImgElement类与CTreeNode关联

为了在event中能够访问相应的Element,CEventObj并不是直接就在其类中保存一个CElement结构的指针,而是在CImgElement对象创建后,又创建了相应的CTreeNode对象,由CTreeNode对象的属性中保存CImgElement类指针。然后将CTreeNode对象的地址,保存在这个img的事件对象CEventObj类的一个EVENTPARAM结构中。

3.    漏洞成因

表层:访问了被释放的对象,最后call了不可访问区域

 技术图片

通过多层指针访问对象element,通过虚函数表指针找到虚函数表,然后call了虚函数,

原对象已经被释放了,访问的不知道啥东西,就崩了。

4.    PoC

原理:形成长段滑板指令加上后缀PayLoad代码的组合,尝试用滑板指令将访问对象的虚函数表覆盖,并将滑板指令地址保存的也是滑板指令,就是无论怎么访问都是滑板指令,最后call滑板指令,就顺着call到PayLoad。使用堆喷大量覆盖堆空间,就是为了覆盖原地址和地址为滑板指令的内存。

内联汇编写的代码,从OD中取出来的shellcode,转成js格式,放入PayLoad。成不成看运气,shellcode把虚函数表覆盖了就没戏。

 技术图片

5.    结语

通过该漏洞可以进行恶意网站访问时,将被攻击,执行恶意代码,或拒绝服务。

6.    参考资料

http://www.geoffchappell.com/notes/security/aurora/index.htm

以上是关于CVE-2010-0249(极光)分析报告的主要内容,如果未能解决你的问题,请参考以下文章

极光行动_流量分析_漏洞复现

极光统一消息系统UMS新版上线!多维数据统计分析助推运营增长

Android app消息推送 百度 极光 个推 信鸽哪个好一些

p1454 圣诞夜的极光

使用fuzzilli对Javascript引擎QuickJS进行Fuzzing和漏洞分析

极光开发者周刊No.0827