
CVE-2025-47812 POC
이것은 Wing FTP Server 익스플로잇(CVE-2025-47812)의 개념 증명(PoC)입니다.
Wing FTP Server 7.4.4 이전 버전은 사용자 이름 매개변수의 안전하지 않은 처리로 인해 원격 코드 실행(RCE) 취약점이 존재합니다. /loginok.html 페이지에서 로그인이 허용될 때, 널 바이트 %00 뒤에 Lua 코드를 주입하여 RCE를 달성할 수 있습니다.
/loginok.html 페이지에 POST 요청을 보내면, c_CheckUser() 함수(올바른 사용자 이름과 비밀번호를 검증하는 함수)가 strlen()을 사용합니다. 문제는 의존하는 함수가 널 바이트 잘림(null bytes truncation)에 취약하다는 점입니다. 즉, 사용자 이름 뒤에 %00을 보내면 c_CheckUser()는 널 바이트 이전의 문자열 부분만 검증합니다: "anonymous%00........." --> "anonymous".
그 후 애플리케이션은 SESSION 변수를 생성하여 파일에 기록합니다. 그러나 이 파일에는 사용자 이름뿐만 아니라 널 바이트와 그 뒤의 코드를 포함한 전체 문자열이 포함됩니다. 이 파일은 Lua 파일이므로 Lua 코드를 주입하여 RCE를 발생시킬 수 있습니다.
익명 로그인이 허용된다고 가정해 보겠습니다. 다음과 같은 구조로 POST 요청을 보내면: username=anonymous%00]]%0dlocal+h+%3d+io.popen("whoami")%0dlocal+r+%3d+h%3aread(\"*a\")%0dh%3aclose()%0dprint(r)%0d--&password=&username_val=anonymous&password_val= 널 바이트 뒤에 Lua 코드를 사용하여 whoami 명령어를 주입하게 됩니다. 이 작업을 완료한 후에는 응답의 UID를 복사하여 동일한 UID를 사용하여 인증된 페이지(예: dir.html 페이지)에 GET 요청을 보내야 합니다.
CVE-2025-47812.py 스크립트가 이 과정을 대신 수행합니다.