Large Bin Attack
Reading time: 3 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 großer Bin ist, siehe diese Seite:
Ein großartiges Beispiel findet sich in how2heap - large bin attack.
Im Grunde genommen sieht man hier, dass in der neuesten "aktuellen" Version von glibc (2.35) nicht überprüft wird: P->bk_nextsize
, was es ermöglicht, eine beliebige Adresse mit dem Wert eines großen Bin-Chunks zu modifizieren, wenn bestimmte Bedingungen erfüllt sind.
In diesem Beispiel finden sich die folgenden Bedingungen:
- Ein großer Chunk wird zugewiesen
- Ein großer Chunk, der kleiner ist als der erste, aber im selben Index ist, wird zugewiesen
- Muss kleiner sein, damit er zuerst in den Bin geht
- (Ein Chunk wird erstellt, um das Zusammenführen mit dem oberen Chunk zu verhindern)
- Dann wird der erste große Chunk freigegeben und ein neuer Chunk, der größer ist als dieser, wird zugewiesen -> Chunk1 geht in den großen Bin
- Dann wird der zweite große Chunk freigegeben
- Jetzt die Verwundbarkeit: Der Angreifer kann
chunk1->bk_nextsize
auf[target-0x20]
modifizieren - Dann wird ein größerer Chunk als Chunk 2 zugewiesen, sodass Chunk2 in den großen Bin eingefügt wird und die Adresse
chunk1->bk_nextsize->fd_nextsize
mit der Adresse von Chunk2 überschreibt
tip
Es gibt andere potenzielle Szenarien, das Ziel ist es, einen Chunk, der kleiner ist als ein aktueller X Chunk im Bin, zum großen Bin hinzuzufügen, sodass er direkt davor im Bin eingefügt werden muss, und wir müssen in der Lage sein, X's bk_nextsize
zu modifizieren, da dort die Adresse des kleineren Chunks geschrieben wird.
Dies ist der relevante Code von malloc. Kommentare wurden hinzugefügt, um besser zu verstehen, wie die Adresse überschrieben wurde:
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
Dies könnte verwendet werden, um die globale Variable global_max_fast
von libc zu überschreiben, um dann einen Fast-Bin-Angriff mit größeren Chunks auszunutzen.
Eine weitere großartige Erklärung dieses Angriffs finden Sie bei guyinatuxedo.
Weitere Beispiele
- La casa de papel. HackOn CTF 2024
- Large Bin Angriff in der gleichen Situation, wie er in how2heap erscheint.
- Der Schreibprimitive ist komplexer, da
global_max_fast
hier nutzlos ist. - FSOP wird benötigt, um den Exploit abzuschließen.
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.