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

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

2018-6-16 14:35
6462
1.前言
最近在exploitdb找到了一个利用SEH的漏洞实例,(网址是https://www.exploit-db.com/exploits/44565/,软件和脚本都在里面),就想要自己分析分析,加深一下理解。漏洞标题是Easy 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处理程序

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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