House of Force
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Diese Technik wurde gepatcht (hier) und erzeugt diesen Fehler: malloc(): corrupted top size
Du kannst den Code von hier ausprobieren, um ihn zu testen, wenn du möchtest.
Das Ziel dieses Angriffs ist es, einen Chunk an einer bestimmten Adresse zuzuweisen.
Ein Überlauf, der es ermöglicht, die Größe des Top-Chunks-Headers zu überschreiben (z.B. -1).
In der Lage sein, die Größe der Heap-Zuweisung zu kontrollieren.
Wenn ein Angreifer einen Chunk an der Adresse P zuweisen möchte, um hier einen Wert zu überschreiben. Er beginnt damit, die Größe des Top-Chunks mit -1
zu überschreiben (vielleicht mit einem Überlauf). Dies stellt sicher, dass malloc mmap für keine Zuweisung verwenden wird, da der Top-Chunk immer genügend Platz haben wird.
Dann berechne den Abstand zwischen der Adresse des Top-Chunks und dem Zielbereich, der zugewiesen werden soll. Dies liegt daran, dass eine malloc mit dieser Größe durchgeführt wird, um den Top-Chunk an diese Position zu verschieben. So kann der Unterschied/die Größe leicht berechnet werden:
Daher wird die Zuweisung einer Größe von target - old_top - 4*sizeof(long)
(die 4 longs sind wegen der Metadaten des oberen Chunks und des neuen Chunks bei der Zuweisung) den oberen Chunk an die Adresse verschieben, die wir überschreiben möchten.
Dann führen Sie eine weitere malloc durch, um einen Chunk an der Zieladresse zu erhalten.
Das Ziel dieses Szenarios ist ein ret2win, bei dem wir die Adresse einer Funktion ändern müssen, die durch die Adresse der ret2win-Funktion aufgerufen wird.
Die Binärdatei hat einen Überlauf, der ausgenutzt werden kann, um die Größe des oberen Chunks zu ändern, die auf -1 oder p64(0xffffffffffffffff) geändert wird.
Dann wird die Adresse zu dem Ort berechnet, an dem der Zeiger zum Überschreiben existiert, und die Differenz von der aktuellen Position des oberen Chunks dorthin wird mit malloc
zugewiesen.
Schließlich wird ein neuer Chunk zugewiesen, der dieses gewünschte Ziel enthält, das von der ret2win-Funktion überschrieben wird.
Im Input your name:
gibt es eine anfängliche Schwachstelle, die es ermöglicht, eine Adresse aus dem Heap zu leaken.
Dann ist es in der Org:
und Host:
Funktionalität möglich, die 64B des s
Zeigers auszufüllen, wenn nach dem org name gefragt wird, der im Stack von der Adresse von v2 gefolgt wird, die dann von dem angegebenen host name gefolgt wird. Da strcpy dann den Inhalt von s in einen Chunk der Größe 64B kopiert, ist es möglich, die Größe des oberen Chunks zu überschreiben mit den Daten, die im host name eingegeben wurden.
Jetzt, da ein beliebiges Schreiben möglich ist, wurde die GOT von atoi
auf die Adresse von printf überschrieben. Es war dann möglich, die Adresse von IO_2_1_stderr
mit %24$p
zu leaken. Und mit diesem libc-Leak war es möglich, die GOT von atoi
erneut mit der Adresse von system
zu überschreiben und sie mit /bin/sh
aufzurufen.
Eine alternative Methode vorgeschlagen in diesem anderen Bericht besteht darin, free
mit puts
zu überschreiben und dann die Adresse von atoi@got
in den Zeiger einzufügen, der später freigegeben wird, sodass er geleakt wird und mit diesem Leak erneut atoi@got
mit system
überschrieben wird und es mit /bin/sh
aufgerufen wird.
Es gibt ein UAF, das es ermöglicht, einen Chunk wiederzuverwenden, der freigegeben wurde, ohne den Zeiger zu löschen. Da es einige Lese-Methoden gibt, ist es möglich, eine libc-Adresse zu leaken, indem man einen Zeiger auf die Free-Funktion in der GOT hier schreibt und dann die Lese-Funktion aufruft.
Dann wurde House of Force verwendet (Missbrauch des UAF), um die Größe des verbleibenden Raums mit -1 zu überschreiben, einen Chunk groß genug zuzuweisen, um zum Free-Hook zu gelangen, und dann einen weiteren Chunk zuzuweisen, der den Free-Hook enthalten wird. Dann wird in den Hook die Adresse von system
geschrieben, in einen Chunk "/bin/sh"
geschrieben und schließlich der Chunk mit diesem String-Inhalt freigegeben.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)