Tcache Bin Attack
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Für weitere Informationen darüber, was ein Tcache-Bin ist, siehe diese Seite:
Bins & Memory AllocationsZunächst einmal ist zu beachten, dass der Tcache in Glibc Version 2.26 eingeführt wurde.
Der Tcache-Angriff (auch bekannt als Tcache-Vergiftung), der auf der guyinatuxido-Seite vorgeschlagen wird, ist sehr ähnlich dem Fast-Bin-Angriff, bei dem das Ziel darin besteht, den Zeiger auf den nächsten Chunk im Bin innerhalb eines freigegebenen Chunks auf eine beliebige Adresse zu überschreiben, sodass es später möglich ist, diese spezifische Adresse zuzuweisen und potenziell Zeiger zu überschreiben.
Heutzutage erhält man jedoch, wenn man den genannten Code ausführt, den Fehler: malloc(): unaligned tcache chunk detected
. Daher ist es notwendig, als Adresse im neuen Zeiger eine ausgerichtete Adresse zu schreiben (oder das Binärprogramm genügend oft auszuführen, sodass die geschriebene Adresse tatsächlich ausgerichtet ist).
In der Regel ist es möglich, am Anfang des Heaps einen Chunk zu finden, der die Anzahl der Chunks pro Index im Tcache und die Adresse des Head-Chunks jedes Tcache-Index enthält. Wenn es aus irgendeinem Grund möglich ist, diese Informationen zu ändern, wäre es möglich, den Head-Chunk eines Index auf eine gewünschte Adresse (wie __malloc_hook
) zeigen zu lassen, um dann einen Chunk der Größe des Index zuzuweisen und den Inhalt von __malloc_hook
in diesem Fall zu überschreiben.
Libc-Info-Leak: Es ist möglich, die Tcache zu füllen, einen Chunk in die unsortierte Liste hinzuzufügen, die Tcache zu leeren und den Chunk aus dem unsortierten Bin erneut zuzuweisen, indem nur die ersten 8B überschrieben werden, wobei die zweite Adresse zu libc aus dem Chunk intakt bleibt, sodass wir sie lesen können.
Tcache-Angriff: Das Binärprogramm ist anfällig für einen 1B Heap-Overflow. Dies wird ausgenutzt, um den Größenheader eines zugewiesenen Chunks zu ändern und ihn größer zu machen. Dann wird dieser Chunk freigegeben, wodurch er zur Tcache von Chunks der gefälschten Größe hinzugefügt wird. Dann werden wir einen Chunk mit der gefälschten Größe zuweisen, und der vorherige Chunk wird zurückgegeben, wobei bekannt ist, dass dieser Chunk tatsächlich kleiner war, was die Möglichkeit bietet, den nächsten Chunk im Speicher zu überschreiben.
Wir werden dies ausnutzen, um den FD-Zeiger des nächsten Chunks auf malloc_hook
zu zeigen, sodass es möglich ist, 2 Zeiger zuzuweisen: zuerst den legitimen Zeiger, den wir gerade geändert haben, und dann wird die zweite Zuweisung einen Chunk in malloc_hook
zurückgeben, den wir ausnutzen können, um ein one gadget zu schreiben.
Libc-Info-Leak: Es gibt eine Verwendung nach der Freigabe und eine doppelte Freigabe. In diesem Bericht hat der Autor eine Adresse von libc geleakt, indem er die Adresse eines Chunks gelesen hat, der in einem kleinen Bin platziert wurde (wie das Leaken aus dem unsortierten Bin, aber aus dem kleinen).
Tcache-Angriff: Ein Tcache wird über eine doppelte Freigabe durchgeführt. Der gleiche Chunk wird zweimal freigegeben, sodass der Chunk innerhalb der Tcache auf sich selbst zeigt. Dann wird er zugewiesen, sein FD-Zeiger wird geändert, um auf den free hook zu zeigen, und dann wird er erneut zugewiesen, sodass der nächste Chunk in der Liste im Free Hook sein wird. Dann wird auch dieser zugewiesen, und es ist möglich, die Adresse von system
hier zu schreiben, sodass wir, wenn ein malloc mit "/bin/sh"
freigegeben wird, eine Shell erhalten.
Die Hauptanfälligkeit hier ist die Fähigkeit, jede Adresse im Heap durch Angabe ihres Offsets zu free
.
Tcache-Indexangriff: Es ist möglich, einen Chunk einer Größe zuzuweisen und freizugeben, der, wenn er im Tcache-Chunk (dem Chunk mit den Informationen der Tcache-Bins) gespeichert wird, eine Adresse mit dem Wert 0x100 erzeugt. Dies liegt daran, dass der Tcache die Anzahl der Chunks in jedem Bin in verschiedenen Bytes speichert, sodass ein Chunk in einem bestimmten Index den Wert 0x100 erzeugt.
Dann sieht dieser Wert so aus, als gäbe es einen Chunk der Größe 0x100. Dies ermöglicht es, ihn durch free
dieser Adresse auszunutzen. Dies wird diese Adresse zum Index der Chunks der Größe 0x100 im Tcache hinzufügen.
Dann wird durch Zuweisen eines Chunks der Größe 0x100 die vorherige Adresse als Chunk zurückgegeben, was es ermöglicht, andere Tcache-Indizes zu überschreiben. Zum Beispiel, indem die Adresse des malloc hooks in einen von ihnen gesetzt wird und ein Chunk der Größe dieses Index zugewiesen wird, erhält man einen Chunk im calloc hook, was das Schreiben eines one gadgets ermöglicht, um eine Shell zu erhalten.
Die gleiche Verwundbarkeit wie zuvor mit einer zusätzlichen Einschränkung.
Tcache-Indexangriff: Ähnlicher Angriff wie der vorherige, aber mit weniger Schritten, indem der Chunk, der die Tcache-Informationen enthält, freigegeben wird, sodass seine Adresse zum Tcache-Index seiner Größe hinzugefügt wird, sodass es möglich ist, diese Größe zuzuweisen und die Tcache-Chunk-Informationen als Chunk zu erhalten, was es ermöglicht, den free hook als Adresse eines Index hinzuzufügen, ihn zuzuweisen und ein one gadget darauf zu schreiben.
Write After Free, um eine Zahl zum fd
-Zeiger hinzuzufügen.
Eine Menge Heap Feng-Shui ist in dieser Herausforderung erforderlich. Der Bericht zeigt, wie die Kontrolle über den Kopf der Tcache Freiliste sehr nützlich ist.
Glibc-Leak über stdout
(FSOP).
Tcache-Vergiftung, um eine beliebige Schreibprimitive zu erhalten.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)