首页
社区
课程
招聘
[原创]Easy MPEG to DVD Burner 1.7.11 SEH Local Buffer Overflow
发表于: 2018-6-16 14:35 6712

[原创]Easy MPEG to DVD Burner 1.7.11 SEH Local Buffer Overflow

2018-6-16 14:35
6712
1.前言
最近在exploitdb找到了一个利用SEH的漏洞实例,(网址是5b3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2P5s2m8D9L8$3W2@1i4K6u0V1k6r3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2P5s2m8D9L8$3W2@1M7#2)9J5c8U0b7@1y4e0j5#2i4K6u0r3i4K6u0o6i4@1f1^5i4@1u0p5i4@1q4r3i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1#2i4K6V1J5i4K6S2o6i4@1f1^5i4K6R3@1i4K6W2m8i4@1f1$3i4K6W2o6i4@1q4o6i4@1f1&6i4K6R3K6i4@1u0p5i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1&6i4K6R3%4i4K6S2o6i4@1f1&6i4K6W2p5i4@1p5J5i4K6t1&6i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1t1H3i4@1t1I4i4@1f1$3i4K6R3K6i4@1t1K6i4@1f1^5i4@1p5$3i4K6R3I4i4@1f1^5i4K6R3%4i4@1q4m8i4@1f1#2i4@1t1%4i4@1t1I4i4@1f1#2i4K6R3^5i4K6R3$3i4@1f1$3i4K6W2q4i4K6V1H3i4@1f1#2i4K6R3^5i4K6R3$3i4@1f1$3i4K6W2q4i4K6V1H3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4K6S2m8i4@1p5H3i4@1f1$3i4@1t1%4i4@1t1I4i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1%4i4K6V1H3i4K6R3$3i4@1f1^5i4@1p5%4i4@1p5K6i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1$3i4@1u0o6i4K6S2r3i4@1f1$3i4@1t1@1i4K6W2q4i4@1f1$3i4@1p5H3i4K6R3%4i4@1f1&6i4@1p5J5i4K6V1^5i4@1f1$3i4K6V1^5i4@1q4r3c8h3q4K6P5b7`.`. MPEG to DVD Burner 1.7.11 SEH Local Buffer Overflow,
实验环境是win7sp1,x64,关于这个的漏洞利用有两个,一个是在没有开启DEP情况下的,一个是开启了DEP的。本篇文章介绍一下调试定位过程,以及exploit编写思路,此exploit针对没有开启DEP的系统环境。
2.定位溢出点和利用点
软件是Easy MPEG to DVD Burner 1.7.11 ,exploitdb官网上提供了下载链接,根据漏洞利用信息,“# Steps : Open the APP > click on register > Username field > just paste watever generated from python script in the txt file.”,定位到漏洞发生的模块,也就是输入用户名的地方。

使用OD附加,有时程序卡死,恢复所有线程即可

由exploitdb提供的python脚本生成样本

生成的Evil.txt里面的内容输到用户名(用010editor打开),就会触发漏洞,弹出calc。当然你也可以输入一长串字符,软件就会崩溃。如果只是分析shellcode,就直接在根据漏洞利用信息evil.py,在他设置的seh地址那里下断点就可以了。这里从溢出点分析,在用户名注册码那里输入myuser myreg,弹出错误提示框

点击暂停程序查看调用

定位到Easy_MPE.00406FAD

定位“跳转来自 00406EB0”

简单的看,程序首先UpdateData从控件获取用户名和注册码字符串(注册码在控件输入处就控制了输入最大长度),然后将其分别拷贝到大小为64字节的局部变量中。接着动态加载ehter.dll,调用其中的reg_code函数,由用户名计算出一个字符串,与你输入的注册码进行比较,由结果弹出不同窗口。其中漏洞模块出在拷贝用户名字符串时,没有指定或判断长度,导致了栈溢出。


输入一长串字符串作为用户名(不要过长),发现其会崩溃。

OD调试时发现,其在执行reg_code函数时内部会出现访问异常,而接着当系统调用SEH的时候,会调用到我们的0x42424242,此地址是无效的。

这时候再来看看SEH指针究竟在哪?
在执行完对用户名的拷贝之后,我们溢出的数据开始于
0018A37C   42424242
向下翻,在od中发现
0018A76C   42424242  指向下一个 SEH 记录的指针
0018A770   42424242  SE处理程序
0x0018A770便是我们需要攻击的目标。0x0018A770-0x0018A37C   = 1012,也就是exploit 1012后四个字节应该放着我们特殊构造的seh地址。
3.exploit编写思路
首先,我们可以利用SEH机制劫持eip到我们设置的某个地址去执行特定代码,这个地址必须是可以预测的,那么“DLL have ASLR,safeSEH,rebase off”的SkinMagic.dll就成为了我们的目标。当我们成功的劫持了EIP,接下来需要做的,就是如何跳回原来的栈上执行数据了(注意这里没有开启DEP)。那么首先就应该分析此时的堆栈和寄存器环境,想想如何在SkinMagic.dll找到一段代码让自己能够跳回到溢出的栈上。这里先记录下溢出堆栈的范围0x0018A37C~0x0018A770,接下来分析分析之前生成的Evil.txt。
4.分析exploit
这时候再来看看SEH指针究竟在哪?
在执行完对用户名的拷贝之后,我们溢出的数据开始于
0018A37C   42424242
向下翻,在od中发现
0018A76C   42424242  指向下一个 SEH 记录的指针
0018A770   42424242  SE处理程序

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-4-12 10:19 被树梢之上编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2018-6-17 22:33
0
雪    币: 432
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问,为什么在win7 64英文系统测试可以,在中文系统测试就不行的原因,初学者,希望大佬指点一下
2019-9-20 11:02
0
游客
登录 | 注册 方可回帖
返回