PCManFTP v2.0(CVE-2013-4730)漏洞分析报告

1. 软件简介

PCMan's FTP Server是洪任谕程序员所研发的一套FTP服务器软件。该软件具有体积小、功能简单等特点。建立连接如图1所示:

 

图1连接说明图

2. 漏洞成因

PCMan's FTP Server 2.0.0版本中存在缓冲区溢出漏洞。远程攻击者可借助USER命令中的长字符串利用该漏洞执行任意代码。通过在recv函数上下断点持续跟踪,发现服务端在接收到登录请求之后,会将收到的信息进行字符串拼接,而在字符串拼接的地方,并未进行长度控制.因此导致缓冲区溢出。

3. 利用过程

3.1  环境搭建

(1) 首先要安装WDK,WDK是WinDbg自带

(2) 安装Python2.7.2

(3) 安装Visual C++ 2008运行库

(4) 安装WinDbg的Python插件”Pykd”(手动安装)

(5) 运行WinDBG开始调试后,输入一下命令(手动安装)

 

 

3.2  溢出测试

(1)用Mon2生成一段3000字节长度的测试代码(字符串)用于确定溢出点,3000如图6所示:

 

4. PoC

首先用windbg的mona2工具生成0x3000大小的有规律数据” A0A1A2A3A4A5A6A7A8A9一直到E0E1E2E3E4E5E6E7E8E9”,然后编写FTP登陆程序给软件传送这段数据,得到溢出偏移值是2002。构建一个的字符串:"USER "(5字节)+垃圾指令(2005字节)+ 跳板指令(4字节)+ shellcode代码(不含0x00,0x0A,0x0D,0x20特殊ASCII)+ "\r\n"(2字节)。demo源代码:有一份能与FTP进行交互的代码才能受控的触发此漏洞。理论上讲,只要我们编写的代码符合RFC959标准,就可以与任何一个FTP服务器进行交互 ,不过FTP客户端的实现非常简单,我们完全没必要去阅读RFC959文档,我们只需作如下几步:

(1) 建立Socket链接,连接目标FTP

(2) 接受FTP服务器的欢迎语

(3) 发送“USER XXXX”登录请求

(4) 接受请求结果(不会走到这一步,此时FTP服务器已被攻击完)  

4.1  构造测试

(1)然后打开vs开始编写发送测试数据包 ,

 

数据包说明图

4.2  jmp esp

(1)查找esp在所有模块中命令

 

指令说明图

(2)查找esp在kernel32.dll模块中命令

 

指令说明图

4.3 实现

(2)建立套接字,socket

 

socket说明图

(3)运行结果,弹出个MessageBox窗口

 

窗口说明图

 

 

5. 结语

漏洞是由于将客户端的命令使用sprintf连上时间日期等信息后储存到局部变量,再写到日志文件中,而没有进行命令长度的检测,导致缓冲区溢出的发生。缓冲区溢出一般是没有进行边界检查,或使用了不安全的函数,避免这个情况能大大提高安全性。

6. 参考资料

[1] 《0day安全:软件漏洞分析技术(第2版)》 王清       著

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值