WWW2Exec - .dtors & .fini_array
Last updated
Last updated
Lernen Sie und üben Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen Sie und üben Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Heutzutage ist es sehr seltsam, eine Binärdatei mit einem .dtors-Abschnitt zu finden!
Die Destruktoren sind Funktionen, die ausgeführt werden, bevor das Programm beendet wird (nachdem die main
-Funktion zurückkehrt).
Die Adressen dieser Funktionen sind im .dtors
-Abschnitt der Binärdatei gespeichert und daher, wenn es Ihnen gelingt, die Adresse eines Shellcodes in __DTOR_END__
zu schreiben, wird dies ausgeführt, bevor das Programm endet.
Holen Sie sich die Adresse dieses Abschnitts mit:
Normalerweise finden Sie die DTOR-Marker zwischen den Werten ffffffff
und 00000000
. Wenn Sie also nur diese Werte sehen, bedeutet das, dass keine Funktion registriert ist. Überschreiben Sie also die 00000000
mit der Adresse des Shellcodes, um ihn auszuführen.
Natürlich müssen Sie zuerst einen Speicherort für den Shellcode finden, um ihn später aufrufen zu können.
Im Wesentlichen handelt es sich hierbei um eine Struktur mit Funktionen, die aufgerufen werden, bevor das Programm beendet wird, ähnlich wie bei .dtors
. Dies ist interessant, wenn Sie Ihren Shellcode aufrufen können, indem Sie zu einer Adresse springen, oder in Fällen, in denen Sie zurück zu main
gehen müssen, um die Schwachstelle ein zweites Mal auszunutzen.
Um die .fini_array
zu missbrauchen und eine ewige Schleife zu erzeugen, können Sie hier überprüfen, was getan wurde: Wenn Sie mindestens 2 Einträge in der .fini_array
haben, können Sie:
Verwenden Sie Ihren ersten Schreibzugriff, um die anfällige willkürliche Schreibfunktion erneut aufzurufen
Berechnen Sie dann die Rücksprungadresse im Stack, die von __libc_csu_fini
gespeichert ist (die Funktion, die alle .fini_array
-Funktionen aufruft) und setzen Sie dort die Adresse von __libc_csu_fini
Dadurch wird __libc_csu_fini
sich selbst erneut aufrufen und die .fini_array
-Funktionen erneut ausführen, die die anfällige WWW-Funktion zweimal aufrufen werden: einmal für die willkürliche Schreiboperation und ein weiteres Mal, um erneut die Rücksprungadresse von __libc_csu_fini
im Stack zu überschreiben, um sich selbst erneut aufzurufen.
Beachten Sie, dass bei Full RELRO**, der Abschnitt .fini_array
schreibgeschützt ist. In neueren Versionen wird selbst bei [Partial RELRO] der Abschnitt .fini_array
ebenfalls schreibgeschützt gemacht.
Lernen Sie & üben Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen Sie & üben Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)