MS12-漏洞分析+手写ROP全流程
这是个练习写ROP的好例子
漏洞介绍
软件简介
MicrosoftXMLCoreServices(MSXML)是一组服务,可用JScript、VBScript、Microsoft开发工具编写的应用构建基于XML的Windows-native应用。
漏洞成因
MicrosoftXMLCoreServices3.0、4.0、5.0和6.0版本中存在漏洞,该漏洞源于访问未初始化内存位置。远程攻击者可利用该漏洞借助特制的web站点,执行任意代码或导致拒绝服务(内存破坏)。
该漏洞产生于msxml3.dll模块中,msxml3.dll是微软的一个SAX2帮助程序类。主要用途包括:XSL转换(XSLT)和XML路径语言(XPath)的完全实现、对XML(SAX2)实现的简单API的修改,包括与万维网联合会(W3C)标准和OASIS测试套件保持更高一致性。
实验环境
虚拟机:WindowsXPSP3
虚拟机:KaliLinux
漏洞程序:IE6+IE8
IDA+x86dbg+immdbgmona插件
漏洞复现
kali的msf里查找MS12-,看有没有现成的利用:
刚好有一个,设置payload:setpayloadwindows/exec,setCMDcalc.exe,run
启动了一个本地HTTPServer,这个服务器应该就是提供poc页面了:
使用WindowsXPSP3自带的IE6打开,直接弹出计算器:
复现成功,该环境的IE6存在该漏洞,接下来对漏洞样本进行分析
前置基础知识简介
ROP
面向返回编程ROP(Return-orientedprogramming):这是一种内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行等)。ROP的核心思想就是利用以ret结尾的指令序列把栈中的应该返回EIP的地址更改成我们需要的值,从而控制程序的执行流程。
DEP
数据执行保护DEP(DataExecutionProtection):用来弥补计算机对数据和代码混淆这一缺陷,主要作用是阻止数据页(堆页,各种堆栈页,内存池页)执行代码,从WindowsXPSP2开始支持
DEP的基本原理是将数据所在内存页表示为不可执行页,当程序溢出转入shellcode时,CPU在数据页上执行指令抛出异常,转入异常处理而不进入shellcode执行,当跳转到不可执行区域时,会触发异常0xC(内存页就类似于这种权限PAGE_READWRITE)
HeapSpray
HeapSpray是一种辅助技术,在shellcode前面加上大量滑板指令,组成一个注入代码段。然后向系统申请大量内存,并且反复用注入代码段来填充。这样就使得进程的地址空间被大量的注入代码所占据。然后结合其他的漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致shellcode的执行。
漏洞分析
漏洞触发POC:
//"clsid:f6D90f11-9c73-11d3-b32e-00C04fbb4"是MSXML3.dll中使用到的ID
通过看POC代码可知,这里漏洞的触发是因为解析img标签src属性处理src的值的时候处理不当导致溢出从而产生漏洞
反汇编里往上追溯溢出值的来源,没太明白是怎么回事
具体参考[原创]CVE--暴雷漏洞详细分析(偏向成因)-二进制漏洞-看雪论坛-安全社区
安全招聘
bbs.pediy.