
Wing FTP Server Remote-Code-Ausführung (RCE) Exploit (CVE-2025-47812)
Wing FTP Server Remotecodeausführung (RCE) Exploit (CVE-2025-47812)
📌 Credit: Die Schwachstelle wurde von Julien (@MrTuxracer) entdeckt.
Diese PoC-Implementierung basiert auf ihrer ursprünglichen Forschung.
Dieses Repository enthält einen Python-Exploit für die Wing FTP Server Remotecodeausführung (RCE) Schwachstelle (CVE-2025-47812). Dieser kritische Fehler ermöglicht es Angreifern, eine Remotecodeausführung als root/SYSTEM auf betroffenen Wing FTP Server-Instanzen zu erreichen, selbst wenn anonymer Zugriff aktiviert ist.
Diese Schwachstelle entsteht durch die unsachgemäße Handhabung von NULL-Bytes im Benutzernamenparameter während des Authentifizierungsprozesses des Wing FTP Servers. Dies ermöglicht es Angreifern, Lua-Code direkt in Sitzungsdateien einzuschleusen. Diese bösartigen Sitzungsdateien werden dann ausgeführt, wenn eine gültige Sitzung geladen wird, was zur Ausführung beliebiger Befehle auf dem Server führt.
Zu den wichtigsten Funktionen dieses Exploits gehören:
Dieses Tool ist ausschließlich für Bildungs- und autorisierte Penetrationstestzwecke bestimmt. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch diese Software verursacht werden. Stellen Sie immer sicher, dass Sie die ausdrückliche, schriftliche Genehmigung haben, bevor Sie Tests an einem System durchführen.
Diese Schwachstelle wurde von Julien (@MrTuxracer) entdeckt und detailliert dokumentiert. Siehe den ursprünglichen Bericht:
What the NULL?! Wing FTP Server RCE (CVE-2025-47812)
Die CVE-2025-47812 Schwachstelle ist ein kritisches Problem, das aus mehreren Schwächen in der Handhabung der Benutzerauthentifizierung und Sitzungen durch den Wing FTP Server resultiert:
c_CheckUser(): Die c_CheckUser()-Funktion, die für die Benutzerauthentifizierung zuständig ist, verwendet intern strlen() auf den bereitgestellten Benutzernamen. Wenn ein NULL-Byte (%00) in den Benutzernamen injiziert wird (z.B. anonymous%00...), schneidet strlen() die Zeichenkette an dieser Stelle ab. Dies bedeutet, dass die Authentifizierung für den Teil des Benutzernamens vor dem NULL-Byte erfolgreich ist, wodurch die ordnungsgemäße Validierung effektiv umgangen wird.rawset(_SESSION, "username", username) in loginok.html den gesamten, unbereinigten Benutzernamen direkt aus den GET- oder POST-Parametern. Dies schließt das NULL-Byte und alle nachfolgenden Zeichen ein.anonymous%00]]%0dlocal+h+%3d+io.popen("id")%0dlocal+r+%3d+h%3aread("*a")%0dh%3aclose()%0dprint(r)%0d--) dazu, dass dieser bösartige Code direkt in die Sitzungsdatei geschrieben wird.Diese Schwachstelle ist besonders schwerwiegend, da der Wing FTP Server standardmäßig oft mit root-Rechten unter Linux oder SYSTEM-Rechten unter Windows läuft. Diese Standardkonfiguration gewährt Angreifern bei erfolgreicher Ausnutzung maximale Kontrolle über das kompromittierte System.
Betroffene Versionen: Wing FTP Server Versionen vor 7.4.4 sind verwundbar.
Dieses Skript unterstützt verschiedene Befehlszeilenargumente, um seine Funktionalität anzupassen.
python3 CVE-2025-47812.py -h
usage: CVE-2025-47812.py.py [-h] [-u URL] [-f FILE] [-c COMMAND] [-v] [-o OUTPUT] [-U USERNAME]
Exploit script for command injection via login.html.
options:
-h, --help show this help message and exit
-u URL, --url URL Target URL (e.g., [http://192.168.134.130](http://192.168.134.130)). Required if -f not specified.
-f FILE, --file FILE File containing list of target URLs (one per line).
-c COMMAND, --command COMMAND
Custom command to execute. Default: whoami. If specified, verbose output is enabled automatically.
-v, --verbose Show full command output (verbose mode). Ignored if -c is used since verbose is auto-enabled.
-o OUTPUT, --output OUTPUT
File to save vulnerable URLs.
-U USERNAME, --username USERNAME
Username to use in the exploit payload. Default: anonymous
python3 CVE-2025-47812.py -u http://192.168.134.130 -c ipconfig

SessionModule.load()-Funktion, die beim Zugriff auf eine authentifizierte Funktionalität (wie /dir.html) aufgerufen wird, führt die Sitzungsdatei direkt mit loadfile(filepath) gefolgt von f() aus. Dieser entscheidende Schritt löst den injizierten Lua-Code aus, was zur Remotecodeausführung führt.