调试器附加设置技巧之漏洞分析实战

安全分析与研究

专注于全球恶意软件的分析与研究

前期实验准备

实验环境:Windows7 x64    Microsoft Office 2013

实验漏洞:CVE-2017-11882

POC获取地址:https://github.com/Ridter/CVE-2017-11882

漏洞影响版本:

Office365

Microsoft Office 2000

Microsoft Office 2003

Microsoft Office 2007 Service Pack 3

Microsoft Office 2007 Service Pack 2

Microsoft Office 2007 Service Pack 1

漏洞调试设置

该漏洞利用了Office2016版本前的旧的公式编辑器,该公式编辑器中使用了非安全函数strcpy对公式编辑器的数据进行拷贝。拷贝固定大小为0x2c字节,而该POC故意构造一个0x30字节的payload,将程序要正常返回的地址覆盖成自己的目标地址,以此实现栈溢出漏洞利用。执行cmd命令弹出计算器。

观察POC产生现象对调试器进行配置,该设置的目的是为了让指定的应用进程只要启动就被指定的调试器附加,需要通过注册表项进行关联调试。

1、 启动注册表编辑器(regedit)

2、打开HKEY_LOCAL_MACHINE根键

3、定位到

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\NT\currentversion\image file execution options

4、 在该子健中添加键值,键值为要被启动附加调试的进程。我这里以CVE_2017_11882触发的漏洞公式编辑器为例

设置要附加调试的进程名,公式编辑器的原名为EQNEDT32.EXE

5、右键该子键添加新字符串

6、 添加调试器

这里的调试器可以是任意的,根据大家的个人喜好可以选择OD、Windbg、x32/x64dbg等等

7、 将调试器的绝对路径添加进入环境变量

8、接下来直接打开exploit,程序有可能不会出现附加,也不会弹框calc.exe。需要重新开启WMI服务。右键选择我的计算机,选择管理->服务

关闭WMI服务

找到下图目录,删除目录下5项

重新启动服务后关机重启即可

9、 配置完成后,触发exploit就会发现OD自动在公式编辑器开启时附加

漏洞分析实战

因为poc创建了进程,所以我们只需要定位到shellcode执行的位置向上回溯即可看到漏洞成因。对WinExec、CreateProcessA和CreateProcessW下断点,让程序跑起来,发现程序断在调用cmd命令拉起calc.exe的位置

通过堆栈回溯向上查找堆栈

通过IDA对执行API的地址进行定位

查看堆栈数据,发现了漏洞利用的ShellCode

知道了POC最终触发的函数,还需要知道跳转到该函数之前的函数封装代码。接下来只需要找到触发漏洞的函数即可。观察堆栈,看到最近的返回地址,也就是执行漏洞之前的最近的函数调用

利用IDA进入0x4115A7这个函数,使用F5查看C伪代码

进入sub_41160f查看可能导致溢出的函数,发现使用strcpy函数。因为该函数对字符串进行拷贝时没有对字符串长度进行校验,所以可以拷贝任意字节大小数据到堆栈中。这也是微软废弃该函数推荐开发人员使用strcpy_s安全函数的原因

在拷贝指令全部下断点观察内存变化找到漏洞溢出点

因为我们不知道是哪个函数调用了该溢出点函数,利用交叉引用在每个调用点下断判断。反复动态调试,不断利用OD的堆栈调用图谱确定poc加载的位置。不断实验后在0x0043B44B 处函数对堆栈溢出字符串进行了拷贝

拷贝poc字符串的函数,将构造好的poc拷贝到内存中

获取要拷贝的目标内存地址的数据

执行拷贝指令后观察此时的堆栈,数据成功被拷贝到0x18f354中

完整构造完成后的堆栈,0x41是为了作为覆盖的填充字节使用的垃圾数据并没有任何意义,目标函数的地址为0x430c12。

将构造好的poc数据传入有漏洞的函数触发栈溢出漏洞

开始执行数据拷贝指定,覆盖原程序的返回地址

对比拷贝前后的堆栈返回地址

成功覆盖后,返回地址改变为0x430c12

使用IDA查看该返回地址

接下来等待所有函数执行完成后利用ret命令修改EIP地址,就可以调用该WinExecAPI

执行至此,漏洞利用成功。

威胁情报收集

常常有读者朋友通过微信或其他方式给我发送一些新的恶意软件或遇到的一些网络攻击案例,非常感谢这些朋友或公众号读者给我提供这些最新的攻击样本和威胁情报,同时也欢迎各位读者朋友,不管是你的企业,还是你个人遇到了一些网络安全攻击事件,都可以通过微信或邮件给我提供各种相关的威胁情报,这些威胁情报包含:

样本

域名

IP地址

钓鱼邮件

钓鱼网站

以及其它一些相关的安全威胁情报信息,同时笔者为了让更多从事这方面的专业人员可以一起交流学习,相互讨论,共同进步,也为了培养更多这方面的专业人才,成立了一个"虚拟的"MR安全团队,有一个MR安全团队微信群,群里的成员可以随时交流讨论各种关于恶意软件的相关话题,专注于全球恶意软件家族的分析与研究,跟踪分析全球黑客组织攻击活动

MR安全团队的成员需要分享一些自己业余时间的一些安全技术分析报告或相关研究文章等,这样可以帮助更多想从事这个方向的新人,有兴趣的可以找我私聊,加入MR安全团队微信群,一起学习,共同进步,同时MR安全团队的成员,可以免费加入笔者的知识星球和专业群,与更多安全行业各个不同方向的朋友进行交流,学习!

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章