跟小黑学漏洞利用开发之SEH+Egghunter

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29

本篇缓冲区漏洞利用开发计划在egghunter之后发出,但是由于各种原因耽误了。本篇我们将不再依赖于mona插件帮助我们寻找可使用地址,只是希望大家理解——工具永远只是辅助,技术才是本质的道理。
同时本篇引入利用Fuzz模糊测试,带领大家领略从Fuzz到exploit全流程,利用程序依然采用vulnserver漏洞演示程序。攻击指令“GMON”,我们需要创建针对GMON指令SPIKE模板,稍后进行模糊测试该指令
模板内容如下:

 
利用SPIKE模糊测试
使用模板,我使用SPIKE的generic_send_tcp解释器在短时间内模糊了应用程序。

如下图当发送至5000字节时候程序失去连接崩溃

 
分析崩溃原因
执行此代码导致应用程序崩溃。正如我们看到,EIP没有被41覆盖

通过观察SEH,可以看到SEH记录被A覆盖。因此,这导致了应用程序崩溃原因。

 
编写POC脚本
通过前面分析要验证导致崩溃的缓冲区长度,我们已经写了下面的POC脚本,其中包含5000个字节。

执行POC脚本成功复现了崩溃。

 
分析偏移量
为了确定覆盖SEH的偏移量,我们使用!mona pc 5000生成了一个5000字节的唯一字符串,然后修改了代码。

使用!mona findmsp,发现nSEH记录被3495字节的偏移量覆盖。

然后,我将漏洞利用修改为以下内容。

如图所示,偏移量正确。nSEH被4 B覆盖,而4 C覆盖了SEH。

 
分析坏字节
如该图所示,D的缓冲区位空间不足以将所有坏字节存储于B和C后面。因此我们需方放入A缓冲区中。修改如下代码

可以看出,除了0x00空字节外,没有其他坏字节被找到。

 
寻找包含pop、pop、ret地址
这里我们不一定必须使用mona插件中的!mona she,我们可以利用调试插件——checksec,帮助我们来完成查找,通过分析vulnserver中essfunc.dll。起始地址62500000到62508000.因此我们只需要寻找此地址内包含pop、pop、ret指令即可。

如图所示地址非常符合我们的要求

下面显示了更新的代码。

我们调整后的代码进行攻击尝试有效,并且SEH被我们刚刚找到包含POP POP RET指令的地址所覆盖。

通过按SHIFT + F9传递异常,我们被重定向到POP POP RET指令的地址。

[1] [2]  下一页