
Klassischer stack-basierter Pufferüberlauf in War FTP Daemon 1.65, der die altmodische Remote-Code-Ausführung durch fehlerhafte FTP-Befehle demonstriert.
Klassischer stack-basierter Pufferüberlauf in War FTP Daemon 1.65, der Old-School-Remote-Codeausführung durch manipulierte FTP-Befehle demonstriert.
Dieses Repository ist Teil des Materials, das ich beim Unterrichten von Memory-Corruption-Exploitation verwende (zusätzlich zu meiner regulären Arbeit unterrichte ich in verschiedenen Cybersecurity-Kursen, in denen ich dazu beitrage, die nächste Generation von Reverse Engineers auszubilden).
CVE-2007-1567 ist ein Fall, den ich direkt nach der Einführung der Grundlagen von Vanilla-EIP-Overwrites verwende. Die Exploitation ist sauber und direkt, aber sie enthält ein Detail, das sie etwas interessanter macht als eine typische erste Übung: ein zusätzliches Bad Character, das das FTP-Protokoll einführt und das die Studierenden identifizieren und beim Erstellen ihres Shellcodes berücksichtigen müssen. Es ist eine kleine Einschränkung, aber sie reicht aus, um die Studierenden zum Nachdenken zu bringen, anstatt nur eine Technik zu kopieren, die sie bereits verwendet haben.
War FTP Daemon 1.65 ist ein Legacy-Windows-FTP-Server aus den späten 1990er-Jahren. Die Schwachstelle liegt im USER-Befehlshandler, der sprintf verwendet, um benutzergesteuerte Eingaben ohne Längenprüfung in einen Stack-Puffer fester Größe zu kopieren. Was diesen Fall für den Unterricht nützlich macht:
War FTP Daemon ist ein Windows-FTP-Server, der ursprünglich in den späten 1990er-Jahren geschrieben wurde. Er lauscht auf TCP-Port 21 und verarbeitet Standard-FTP-Befehle. Die Schwachstelle befindet sich im USER-Befehlshandler, der den von einem verbindenden Client gesendeten Benutzernamen mithilfe von sprintf ohne Längenprüfung verarbeitet.
Wichtige technische Details:
War FTP Daemon verarbeitet den USER-Befehl, indem er den übergebenen Benutzernamen an sprintf weitergibt, das ihn ohne Längenprüfung in einen Stack-Puffer fester Größe kopiert. Eine vereinfachte Version der anfälligen Logik sieht wie folgt aus:
char buffer[256];
sprintf(buffer, "%sCRLF", username);
Das Senden einer ausreichend langen Zeichenkette als USER-Argument führt dazu, dass die Kopie über das Ende des Puffers hinausschreibt und den Stack so lange beschädigt, bis die gespeicherte Rücksprungadresse überschrieben ist. Wenn die Funktion zurückkehrt, lädt die CPU den vom Angreifer kontrollierten Wert vom Stack in EIP und springt dorthin.
Der Absturz kann reproduziert werden, indem ein übermäßig großes USER-Argument über FTP gesendet wird. Es ist keine Authentifizierung erforderlich. Beispiel mit Python:
import socket
HOST = '127.0.0.1'
PORT = 21
payload = b"A" * 700
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER " + payload + b"\r\n")
s.close()
Bei Ausführung unter einem Debugger zeigt der Absturz EIP, das mit benutzergesteuerten Daten überschrieben ist:
EIP = 41414141
was bestätigt, dass die gespeicherte Rücksprungadresse durch den Überlauf beschädigt wurde.
Das Ziel dieses Repository ist es nicht nur, den Absturz zu demonstrieren, sondern auch den vollständigen Exploitation-Prozess Schritt für Schritt durchzugehen, vom Fuzzing bis zu einer funktionierenden Reverse Shell.
Um die Haupt-README übersichtlich zu halten, befinden sich die detaillierten Exploitation-Notizen, Skripte und Debugger-Schritte im Ordner Vulnerability 📂 dieses Repositorys.
Dort finden Sie den vollständigen Workflow zur Ausnutzung dieser CVE, einschließlich: