
CVE-2025-47812 POC
Dies ist ein Proof of Concept (PoC) des Wing FTP Server Exploit (CVE-2025-47812)
Wing FTP Server Versionen vor 7.4.4 wiesen eine Schwachstelle zur Remote Code Execution (RCE) auf, die auf die unsichere Behandlung des Benutzernamen-Parameters zurückzuführen ist. Wenn wir uns auf der Seite /loginok.html anmelden dürfen, können wir Null-Bytes %00 gefolgt von Lua-Code einschleusen, um RCE zu erreichen.
Wenn wir eine POST-Anfrage an die Seite loginok.html senden, verwendet die Funktion c_CheckUser() (diejenige, die den korrekten Benutzernamen und das Passwort validiert) strlen(). Das Problem ist, dass die verwendete Funktion anfällig für die Abschneidung durch Null-Bytes ist. Das bedeutet, dass c_CheckUser() nur den Teil der Zeichenkette vor dem Null-Byte validiert, wenn wir %00 nach dem Benutzernamen senden: "anonymous%00........." --> "anonymous".
Anschließend erstellt die Anwendung eine SESSION-Variable, die in eine Datei geschrieben wird. Diese Datei enthält jedoch nicht nur den Benutzernamen, sondern die gesamte Zeichenkette einschließlich des Null-Bytes und des darauf folgenden Codes. Da es sich bei der Datei um eine Lua-Datei handelt, kann Lua-Code eingeschleust werden, was zu einer RCE führt.
Angenommen, der anonyme Login ist erlaubt. Wenn wir eine POST-Anfrage mit dieser Struktur senden: 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= haben wir den Befehl whoami nach den Null-Bytes mit Lua-Code eingeschleust. Sobald wir dies getan haben, müssen wir die UID der Antwort kopieren und eine GET-Anfrage an eine beliebige authentifizierte Seite senden, zum Beispiel die Seite dir.html, unter Verwendung derselben UID.
Das Skript CVE-2025-47812.py erledigt den Vorgang für uns.