首页
社区
课程
招聘
[分享][原创]PCMan FTP远程代码执行漏洞分析(CVE-2013-4730)
2017-4-14 23:06 5135

[分享][原创]PCMan FTP远程代码执行漏洞分析(CVE-2013-4730)

2017-4-14 23:06
5135

前言

刚转入二进制不久,拿网上大牛写过的帖子练手,发现网上方法:突破点都是在IDA中搜索recv,然后下断点,跟踪到异常处,发现触发漏洞地方。但是大部分我们分析漏洞程序,很难有这种,一开始就知道在关键函数下断点,等待断点触发的。大部分还是从POC异常触发点,然后一步一步回溯逆向到引发漏洞的关键函数的。分享一下不同的角度,感谢15PB给我带来不一样的世界,还记得任老师最后告诫我们的那句话:不要让你的技术超过你的人品。。

漏洞环境搭建与分析

https://www.exploit-db.com/exploits/26471/

环境  WindowsXP下    python 2.7.13

POC

import   socket

s =   socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("127.0.0.1",   21))

s.recv(1024)

User   = 'anonymous'

Password='A'*8000

s.send("USER"   + User + "\r\n")

print   s.recv(1024)

s.send("PASS"   + Password + "\r\n")

print   s.recv(1024)

运行POC,触发漏洞

我们可以看出返回值被AAAA覆盖了,此时的esp之前应该就是返回值,所以我们可以在0012ed6c之前下硬件写入条件断点重新打开windbg 附加PCMan 用windbg下如下命令,此时我们只要关注堆栈返回值上面几处的值是否被覆盖了AAAA,等待断点命中

ba w4 0012ed5c ".if(poi(0012ed5c)=0x41414141){}.else{gc}"

运行POC可以看到在004173af断下,此时我们栈中,已经被A覆盖了大部分,但是返回值还没有被覆盖,我们可以看到


IDA中定位此处的EIP看出此时在write_string函数中,调用write_char函数循环在向栈写内容


我们接着向上回溯看看调用此函数的是谁,windbg单步,或者gu执行到函数返回,在函数回溯过程中发现sprintf函数,F5查看,此时的sprintf函数后面带有%s,所以是有可能发生字符串溢出的


调用完sprintf函数过后,返回时,发现堆栈已经被AAAA覆盖了,我们可以在 sprintf处下断点验证,调用此函数前,和调用该函数过后,堆栈的情况,我们可知函数的返回值存放在0012ed68+4


重新启动windbg 附加PCMan程序对 sprintf函数重点观察,调用前后堆栈变化,我们在IDA中可以看到sprintf参数的最后一个是讲字符串写入缓冲区中,没有进行长度限制,导致了堆栈破坏  而且ecx表明的是将要拷贝的字符串缓冲区


第一次拷贝


第二次拷贝


第三次拷贝


第四次拷贝


第五次拷贝


第六次拷贝


根据上面分析可知,sprintf共发生六次拷贝,其中前五次没有发生堆栈溢出,最后一次拷贝数据比较大,发生了溢出,然后EIP被修改为我们控制的地方,也就是AAAA

 



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (5)
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
璀璨刀光 2017-4-14 23:19
2
0
好帖收藏了,谢谢楼主分享
雪    币: 32
活跃值: (82)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
fily阳光 2017-4-15 13:39
3
0
学习了,找个时间测试一下
雪    币: 2218
活跃值: (1023)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
灬哈密瓜 2017-5-17 10:21
4
0
默默的收下了
雪    币: 224
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大人的涂鸦丶 2017-5-17 14:37
5
0
默默的收下了
雪    币: 9210
活跃值: (1871)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
HadesW 2 2018-4-13 21:27
6
0
也在学习这个例子,过来看看
游客
登录 | 注册 方可回帖
返回