Fast 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 Fast Bin ist, besuche diese Seite:
Bins & Memory AllocationsDa der Fast Bin eine einfach verkettete Liste ist, gibt es viel weniger Schutzmaßnahmen als in anderen Bins, und es reicht aus, eine Adresse in einem freigegebenen Fast Bin Chunk zu modifizieren, um später einen Chunk an einer beliebigen Speicheradresse zu allokieren.
Zusammenfassend:
Sie finden ein vollständiges Beispiel in einem sehr gut erklärten Code von https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Wenn es möglich ist, den Wert der globalen Variable global_max_fast
mit einer großen Zahl zu überschreiben, ermöglicht dies die Erstellung von Fast-Bin-Chunks größerer Größen, was potenziell Fast-Bin-Angriffe in Szenarien ermöglicht, in denen dies zuvor nicht möglich war. Diese Situation ist im Kontext des Large Bin Attack und des Unsorted Bin Attack nützlich.
Es ist möglich, Chunks zuzuweisen, sie freizugeben, ihren Inhalt zu lesen und sie (mit einer Overflow-Sicherheitsanfälligkeit) zu füllen.
Chunk konsolidieren für Infoleak: Die Technik besteht im Wesentlichen darin, den Overflow auszunutzen, um eine gefälschte prev_size
zu erstellen, sodass ein vorheriger Chunk in einen größeren eingefügt wird, sodass beim Zuweisen des größeren Chunks, der einen anderen Chunk enthält, dessen Daten ausgedruckt und eine Adresse zu libc (main_arena+88
) geleakt werden kann.
Malloc-Hook überschreiben: Dazu und durch Ausnutzung der vorherigen Überlappungssituation war es möglich, 2 Chunks zu haben, die auf denselben Speicher zeigten. Daher war es möglich, beide freizugeben (einen anderen Chunk dazwischen freizugeben, um Schutzmaßnahmen zu vermeiden), sodass derselbe Chunk 2 Mal im Fast Bin vorhanden war. Dann war es möglich, ihn erneut zuzuweisen, die Adresse des nächsten Chunks zu überschreiben, um ein wenig vor __malloc_hook
zu zeigen (damit es auf eine Ganzzahl zeigt, die malloc für eine freie Größe hält - ein weiterer Bypass), ihn erneut zuzuweisen und dann einen anderen Chunk zuzuweisen, der eine Adresse zu malloc-Hooks erhält.
Schließlich wurde ein One Gadget dort geschrieben.
Es gibt einen Heap-Overflow und Use-After-Free sowie Double-Free, da es möglich ist, die Zeiger wiederzuverwenden und erneut freizugeben, wenn ein Chunk freigegeben wird.
Libc-Infoleak: Einfach einige Chunks freigeben und sie erhalten einen Zeiger auf einen Teil des Standorts der Hauptarena. Da Sie freigegebene Zeiger wiederverwenden können, lesen Sie einfach diese Adresse.
Fast Bin Attack: Alle Zeiger auf die Zuweisungen werden in einem Array gespeichert, sodass wir ein paar Fast-Bin-Chunks freigeben und im letzten den Zeiger überschreiben können, um ein wenig vor diesem Array von Zeigern zu zeigen. Dann weisen wir ein paar Chunks mit derselben Größe zu und erhalten zuerst den legitimen und dann den gefälschten, der das Array von Zeigern enthält. Wir können jetzt diese Zuweisungszeiger überschreiben, um die GOT-Adresse von free
auf system
zu zeigen und dann "/bin/sh"
in Chunk 1 zu schreiben, um dann free(chunk1)
aufzurufen, was stattdessen system("/bin/sh")
ausführt.
Ein weiteres Beispiel für die Ausnutzung eines ein Byte großen Overflows, um Chunks im unsortierten Bin zu konsolidieren und einen libc-Infoleak zu erhalten und dann einen Fast-Bin-Angriff durchzuführen, um den malloc-Hook mit einer One-Gadget-Adresse zu überschreiben.
Nach einem Infoleak, der den unsortierten Bin mit einem UAF ausnutzt, um eine libc-Adresse und eine PIE-Adresse zu leaken, verwendete der Exploit dieses CTF einen Fast-Bin-Angriff, um einen Chunk an einem Ort zuzuweisen, an dem die Zeiger auf kontrollierte Chunks lagen, sodass es möglich war, bestimmte Zeiger zu überschreiben, um eine One-Gadget in der GOT zu schreiben.
Sie können einen Fast Bin-Angriff finden, der durch einen unsortierten Bin-Angriff ausgenutzt wird:
Beachten Sie, dass es üblich ist, vor der Durchführung von Fast-Bin-Angriffen die Freilisten auszunutzen, um libc/Heap-Adressen zu leaken (wenn nötig).
Wir können nur Chunks mit einer Größe größer als 0x100
zuweisen.
Überschreiben Sie global_max_fast
mit einem Unsorted Bin-Angriff (funktioniert 1/16 Mal aufgrund von ASLR, da wir 12 Bits ändern müssen, aber 16 Bits ändern müssen).
Fast Bin-Angriff zur Modifikation eines globalen Arrays von Chunks. Dies bietet eine willkürliche Lese-/Schreibprimitive, die es ermöglicht, die GOT zu modifizieren und einige Funktionen so einzustellen, dass sie auf system
zeigen.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)