
SEH-basierter Buffer-Overflow im Easy File Sharing Web Server 7.2, der demonstriert, wie ein authentifizierter HTTP-POST-Parameter die Exception-Handler-Kette korrumpieren kann.
SEH-basierter Pufferüberlauf in Easy File Sharing Web Server 7.2, der zeigt, wie ein authentifizierter HTTP-POST-Parameter die Ausnahmebehandlungs-Kette beschädigen kann.
Dieses Repository ist Teil des Materials, das ich verwende, wenn ich die Ausnutzung von Speicherfehlern unterrichte (neben meiner regulären Arbeit unterrichte ich auch in verschiedenen Cybersicherheitskursen, wo ich helfe, die nächste Generation von Reverse Engineers auszubilden).
CVE-2018-18912 ist der Fall, den ich nutze, um den Sprung von einfachen EIP-Überschreibungen zur SEH-basierten Ausnutzung zu machen. Sobald die Studenten verstehen, wie eine direkte Rücksprungadressen-Überschreibung funktioniert, ist der nächste Schritt zu verstehen, was passiert, wenn der Stack so stark beschädigt ist, dass das Programm vor der Rückkehr eine Ausnahme auslöst, und wie diese Ausnahmehandler-Kette stattdessen zur Angriffsfläche wird. Diese CVE demonstriert diesen Übergang sauber: Der Überlauf ist tief genug, um die SEH-Kette zu erreichen, und der Ausnutzungspfad folgt der klassischen POP-POP-RETN-Technik, die jeder Exploit-Entwickler verstehen muss. Die optionale DEP-Umgehung mittels ROP bleibt als Erweiterung für Studenten, die weiter gehen möchten – derselbe Überlauf, eine andere Gadget-Strategie, ein viel schwierigeres Problem.
Diese Schwachstelle betrifft Easy File Sharing Web Server 7.2, eine leichte Windows-Webserver-Anwendung, die weit verbreitet für einfaches Dateiteilen verwendet wurde. Die Software wurde ohne moderne Sicherheitsvorkehrungen entwickelt. Was diesen Fall aus didaktischer Sicht besonders interessant macht, ist die Kombination von Faktoren:
Diese Kombination macht CVE-2018-18912 zu einem hervorragenden Fall, um Exploit-Entwicklungstechniken über die Grundlagen hinaus zu vermitteln.
Easy File Sharing Web Server 7.2 ist eine Windows-Anwendung, die es Benutzern ermöglicht, Dateien über HTTP zu teilen. Sie bietet Funktionen wie Dateibrowsing, Benutzerauthentifizierung und ein integriertes Forumsystem.
Die Forum-Funktionalität akzeptiert POST-Anfragen zum Erstellen neuer Themen. Eines der von diesem Endpunkt verarbeiteten Formularfelder ist der author-Parameter. Intern kopiert die Anwendung diesen benutzergesteuerten Wert in einen Stack-Puffer fester Größe, ohne die Länge zu überprüfen.
Die Schwachstelle wurde 2018 entdeckt und gemeldet. Der ursprüngliche PoC wurde kurz darauf veröffentlicht und zeigte sowohl den Absturz als auch eine funktionierende Exploit-Kette einschließlich ROP-Gadgets aus dem gebündelten ImageLoad.dll-Modul.
Wichtige technische Details:
Easy File Sharing Web Server verarbeitet HTTP-POST-Anfragen an /forum.ghp, wenn ein Benutzer ein neues Forum-Thema erstellt. Einer der akzeptierten Parameter ist author, der ohne Längenprüfung in einen lokalen Stack-Puffer kopiert wird.
Beim Reversen der Binärdatei kann beobachtet werden, dass der Handler für dieses Formularfeld einen Puffer fester Größe und eine unsichere Kopieroperation verwendet. Eine vereinfachte Version der anfälligen Logik sieht wie folgt aus:
char author_buffer[64];
strcpy(author_buffer, user_input);
Da der Zielpuffer eine feste Größe hat und die Eingabelänge nicht validiert wird, führt das Senden einer ausreichend langen Zeichenfolge im author-Feld dazu, dass die Kopie über das Ende des Puffers hinausschreibt.
Wenn mehr Daten geschrieben werden, wird das Stack-Layout beschädigt. Im Gegensatz zu einer einfachen Rücksprungadressen-Überschreibung erreicht der Überlauf die auf dem Stack gespeicherte Structured Exception Handler (SEH)-Kette. Wenn infolge des beschädigten Stacks eine Ausnahme ausgelöst wird, durchläuft das Betriebssystem die SEH-Kette und übergibt die Kontrolle an die vom Angreifer kontrollierte Handler-Adresse.
Der Ausnutzungsablauf folgt daher der SEH-Überschreibungstechnik:
Dies macht die Schwachstelle komplexer auszunutzen als eine einfache EIP-Überschreibung, jedoch auch repräsentativer für reale Szenarien.
Der Absturz kann reproduziert werden, indem nach der Authentifizierung mit gültigen Anmeldedaten eine lange Zeichenfolge im author-Parameter einer POST-Anfrage an /forum.ghp gesendet wird. Beispiel mit Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 500
request = (
b"POST /forum.ghp?forumid=1 HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Cookie: UserID=test; PassWD=test; SESSIONID=1234\r\n"
b"Connection: close\r\n"
b"\r\n"
b"author=" + payload + b"&passwd=test&title=test&content=test&Submit=Submit\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
Bei Ausführung unter einem Debugger zeigt der Absturz eine beschädigte SEH-Kette und eine Zugriffsverletzung, was bestätigt, dass vom Benutzer kontrollierte Daten den Ausnahmehandler-Zeiger überschrieben haben.
Das Ziel dieses Repositorys ist nicht nur den Absturz zu demonstrieren, sondern auch den vollständigen Ausnutzungsprozess Schritt für Schritt durchzugehen, der Methodik folgend, die bei der Entwicklung echter SEH-basierter Exploits verwendet wird.
Um die Haupt-README übersichtlich zu halten, befinden sich die detaillierten Ausnutzungsnotizen, Skripte und Debugger-Schritte im Vulnerability 📂-Ordner dieses Repositorys.
Dort finden Sie den vollständigen Workflow, der zur Ausnutzung dieser CVE verwendet wurde, einschließlich: