Tcache Bin Attack
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Für weitere Informationen darüber, was ein Tcache-Bin ist, siehe diese Seite:
Zunä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 wurde, 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 erhalten Sie jedoch, wenn Sie den genannten Code ausführen, 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 ausreichend oft auszuführen, sodass die geschriebene Adresse tatsächlich ausgerichtet ist).
Tcache-Indexangriff
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.
Beispiele
- CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
- Libc-Info-Leck: 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, wobei nur die ersten 8B überschrieben werden, sodass die zweite Adresse zu libc aus dem Chunk intakt bleibt, damit wir sie lesen können.
- Tcache-Angriff: Die Binärdatei ist anfällig für einen 1B Heap-Overflow. Dies wird ausgenutzt, um die Größenüberschrift 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 aufmalloc_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 inmalloc_hook
zurückgeben, den wir ausnutzen können, um einen one gadget zu schreiben. - CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
- Libc-Info-Leck: 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 des 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. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
- 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, wird ein Chunk im calloc-Hook gewährt, was das Schreiben eines one gadgets ermöglicht, um eine Shell zu erhalten. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
- 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 einen one gadget darauf zu schreiben.
- Math Door. HTB Cyber Apocalypse CTF 2023
- 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-Leck über
stdout
(FSOP). - Tcache-Vergiftung, um eine beliebige Schreibprimitive zu erhalten.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.