利用[CVE-2013-3346]-Adobe Reader释放重引用和[CVE-2013-5065]-NDProxy.sys数组越界漏洞的恶意代码分析

0x00 pdf文件结构学习
参考:漏洞战争
http://blog.csdn.net/adolphfend/article/details/24729025


1.文件头:该文件所遵从的PDF规范的版本号


2.文件体:由一系列pdf对象组成(页面,字体,图片等)
常见的对象:字体(Font),流对象(Stream),路径对象(Path Object),文本对象(Text Object),图像对象(Image Object),动作对象(Action Object)等



3.交叉引用表:为了能对间接对象进行随机存取而设立的一个间接对象的地址索引表。

4.文件尾:声明了交叉引用表的地址,文件体的根对象等


0x01 样本shellcode提取与分析
1.peepdf提取样本的shellcode
   使用jjencode加密,用peepdf中的js_jjdecode进行解密



    用js_analyse分析提取shellcode,并保存到文件中

2.分析shellcode
  将提取出来的二进制转成exe后,用调试器调试分析
  获取kernel32.dll ->hash:0x6E2BCA17

  遍历导出表,获取用到的函数
  函数hash


   解密出字符串(驱动程序符号连接名)

  获取一个内核函数(在进程中分配内存)

  在刚刚分配的空间里,拷贝一段数据(接近0)(CVE-2013-5065漏洞利用)

  打开驱动程序的符号链接名,进行通讯 控制码 0x8FFF23C8


 但不断单步会在SetFilePointer 陷入死循环,往下查看可以推测出,shellcode在寻找0xA0909F2开头的字节码



2.1 漏洞分析
    分析从解密的js代码中,可以看出是释放后重用漏洞(UAF
    1.构造占用的块

  2.创建父ToolButton对象(evil),并设置回调函数addButtonFunc,执行父对象的 回调函数时,创建子类对象(xxx),并设置子类对象的回调函数removeButtonFunc
   执行removeButtonFunc时,就释放了父类对象(evil),然后重新占用父类对象 释放的内存块,由于子类对象还引用父类对象,当子类对象调用父类对象某个函数, 就会执行漏洞利用的代码



    3.为了调试上面死循环处的代码,用带漏洞的Adobe Reader11.0.00),打开样本

      可以看出rop链是从icucnv40模块加载的

   4.sxe ld:icucnv40 让加载icucnv40时断下,对rop链中的4a85822c下断,一直单步后,会看到之前调的shellcode起始位置,rop链主要是通过CreateFileMappingAMapViewOfFile映射具有RWX权限的内存,绕过DEP




  5.bp 3120000+22d,直接对之前调过的代码下断(22d是文件偏移)

   一直单步到达关键的地方(寻找0xA0909F2开头的字节码)
   分配一块内存

  读取2b563字节到刚刚分配的内存


  循环比较是否找到0xA0909F2开头的字节码

   找到后,eax先偏移4个字节,指向加密的PE文件

  对加密的pe文件进行解密,dump出来
 .writemem c:\test\pe.bin  0x07f404f2 L2b080




在临时文件夹处创建文件,并运行起来(通过CVE-2013-5065漏洞已经将Adobe Reader提升为system权限),再执行解密出来的文件



0x02 CVE-2013-5065漏洞分析
  提取刚刚在0地址处,拷贝的数据(exp


 通过控制码8FFF23C8h,很快确定对应的回调函数

 Shellcode传入的buf390000


最后执行的流程





由于off_18008函数地址表的大小为0x1a4,而从ring3层传来的buf里的0x0x7030125经过一系列运算后,变成0x1b0,最终导致数组越界访问

具体漏洞利用参考:
https://www.trustwave.com/Resources/SpiderLabs-Blog/The-Kernel-is-calling-a-zero%28day%29-pointer-%E2%80%93-CVE-2013-5065-%E2%80%93-Ring-Ring/






评论

此博客中的热门博文

Opencart-v3-0-3-0 user changes password at csrf vulnerability

Docker's latest version of privilege escalation vulnerability

Charles 4.2.7 XML External Entity