漏洞分析报告-PCManFTP v2.0(CVE-2013-4730)
PCManFTP v2.0(CVE-2013-4730)漏洞分析报告
软件名称:PCManFTP 软件版本:2.0 漏洞模块:PCManFTPD2.exe 模块版本:2.0.0.0 编译日期:2005-01-01 |
操作系统:Windows XP/2003/7/8.1/10 漏洞编号:CVE-2013-4730 危害等级:高危 漏洞类型:缓冲区溢出 威胁类型:远程 |
2018年5 月22日
目录
-
软件简介
PCMan's FTP Server是洪任谕程序员所研发的一套FTP服务器软件。该软件具有体积小、功能简单等特点。
软件界面:
-
漏洞成因
PCMan's FTP Server 2.0.0版本中存在缓冲区溢出漏洞。远程攻击者可借助USER命令中的长字符串利用该漏洞执行任意代码。也就是说我们在未提前获得目标的FTP访问权限的前提下,即可对其进行溢出攻击,因此这个漏洞造成的影响非常严重。
-
构造触发漏洞的POC
我们需要有一份能与FTP进行交互的代码才能受控的触发此漏洞。理论上讲,只要我们编写的代码符合RFC959标准,就可以与任何一个FTP服务器进行交互
不过FTP客户端的实现非常简单,我们完全没必要去阅读RFC959文档,我们只需作如下几步:
1.建立Socket链接,连接目标FTP
2.接受FTP服务器的欢迎语
3.发送"USER XXXX"登录请求
4.接受请求结果(不会走到这一步,此时FTP服务器已被攻击完)
和服务器交互的代码:
使用Mona.py测试溢出点:
Mona2是Corelan Team团队开发的一个专门用于辅助漏洞挖掘的脚本插件
Mona原本只支持Immunity Debugger,但是由于Immunity Debugger与OllyDbg同根同源,而OllyDbg的更新已经明显乏力,因此Mona2推出了可以在Windbg上使用的版本
Mona可以帮助我们快速的定位溢出点,并且可以帮助我们查找一些用于溢出的特殊指令,以及构成复杂攻击代码的小部件
我们现在可以用Mona2生成一段3000字节长度的测试字符串,用于确定溢出点
触发溢出后可见如下回显,证明我们正要在一个不存在的位置执行代码
通过以上信息我们知道EIP被覆盖成了0x31704330,我们可以使用如下的Mona2命令计算其溢出点
由以上结果可知,我们的溢出点在偏移2012的位置
溢出点已经确认,接下来我们需要用Mona2在目标程序空间中找到一个跳板指令"JMP ESP"
接下来可以构造我们的Exploit了
-
构造Exploit
构建一个长字符串发送登录请求
格式:"USER "+填充字节区+JMP ESP跳板指令+滑板指令区+Shellcode(前面一部分是解密代码,后面是加过密的Shellcode(不含0x00,0x0A,0x0D))+"\r\n"
以下是源码
-
结语
- 造成缓冲区溢出的主要原因是在对字符数组进行操作时候,并未检测它的长度,从而导致错误的发生.
- 在进行漏洞挖掘的时候,要注意发生溢出的函数是否有参数.编写exploit代码的时候,要将这些参数考虑在内.