首页
社区
课程
招聘
[原创]EPS2.2 整数溢出漏洞分析到利用pwntools进行漏洞利用
发表于: 2017-4-1 11:02 6671

[原创]EPS2.2 整数溢出漏洞分析到利用pwntools进行漏洞利用

2017-4-1 11:02
6671

软件全称:Easy Internet Sharing Proxy Server 2.2

因为有整数溢出,导致复制长度过长,覆盖SEH,导致任意代码执行

分析来源:https://www.exploit-db.com/exploits/40760/

因为k0shl在i春秋讲这个,我也实践一下

欢迎大家交流,我的blog:http://blog.csdn.net/u012763794/

Windows 7 Sp1 32位 
metasploit 
EPS 2.2 
windbg 
IDA 
mona

首先我们的exp来源于exploitdb,我的话要改一下开头的类名称为Metasploit3才能用

我们直接上metasploit,由于我们用的是win7,所以我们target就默认让它是win10,故意让它崩掉

还有你会发现默认使用的payload是windows/meterpreter/reverse_tcp


看看崩溃信息,ecx的值非常大,edi所指向的地址是没有任何权限的,所以导致了异常


我们在ida定位一下崩溃的伪代码


也看看汇编吧


ecx来源于[esp+8370h+var_640B],那我们在00439720下断点

我们下面可以看到这里有个带符号扩展的mov指令,movsx,这是将90扩展成dword

由于0x90的最高位是1啊,那扩展后的前3个字节的二进制位都是1,即结果是0xFFFFFF90,不信看下面


我们看到复制大小3fffffe4 ,而目的地址申请的大小为

0x04350000 - 0x04347000= 0x9000

这样就会复制到不可写的内存(超越了栈顶)


那么对于的C语言或者说是C++代码是怎样的呢


可以看到是将字符型转化为整型可以这样

我们用wireshark抓包,tcp流跟随一下,看看metasploit发送了什么


我们再看看metasploit,win10利用代码发送的数据啊 
那我们完全有理由相信,触发漏洞的90出自于开头的90的其中一个


我们上pwntools,自己搞一下(payload是mona生成的定位字符)

发送,我们看到这时movsx ebp,byte ptr [esp+1F65h] 

中[esp+1F65h]的值是61(即’a’),这样看不出是哪个位置的小a的值

那我们将payload改一下

payload = "ABCDEFGH...."

那从下面我们看到只要发送的第二个字符的二进制位的最高位为1即可触发漏洞


比如我们payload是:

payload = "A\xffCD

那么就会下面这样


不包括前两个字符,我们定位到SEH位置为1032,NEXT SEH就是1028咯

我们看看当我们执行到我们覆盖的SEH的指令时的栈情况 
我们可以注意到03e7ff80就是NEXT SEH的位置


Windows7一般默认只是Windows软件和服务才开了DEP,所以我们不用绕过DEP,exploitdb的作者在Windows7是使用了绕过dep的方法,seh覆盖成了0043ad38这个地址

但这里没开DEP,这里直接覆盖SEH为pop pop ret, 
由于后面的栈地址不够了,所以我们的Shellcode要放在前面

最终exp:



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 292
活跃值: (800)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
赞,没想到我在i春秋的课程还是有人看的能带来一点点帮助就好啦..学习了!
2017-4-1 22:16
0
雪    币: 413
活跃值: (274)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
Keoyo 赞,没想到我在i春秋的课程还是有人看的[em_13]能带来一点点帮助就好啦..学习了!
2017-4-2 00:13
0
游客
登录 | 注册 方可回帖
返回
//