zoukankan      html  css  js  c++  java
  • CVE-2010-0249(极光)分析报告

     

    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

    原理:创建对象,再释放,向对象里面写数据(如0x0C0D,或者0x0A0D),主要是再次访问释放的对象时,就会将写的数据当成地址调用(虚函数表),因为是大面积覆盖,不论是多少次级指针,都指向同一个地址,就是0x0C0D0C0D周围保存的也是0x0C0D0C0D,最终就会call 0x0C0D0C0D。

    这时候我们再针对0x0C0D0C0D或者0x0A0D0A0D,进行堆喷射,使执行到shellcode中。

     

    5.    结语

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

    6.    参考资料

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

  • 相关阅读:
    C# 如何得到局域网中的计算机名?
    设计模式之Factory(转帖)[学习用]
    byte类型特殊的地方
    原码、反码和补码
    由Public key生成Public key token
    .Net位运算符&,|,!,^,<<,>>
    强命名程序集,签名,延迟签名
    把16进制字符转换成byte数组
    SHA1哈希算法
    .NET工具篇(四)—SN.EXE
  • 原文地址:https://www.cnblogs.com/jf-blog/p/12368687.html
Copyright © 2011-2022 走看看