mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
5.8 KiB
5.8 KiB
Maison d'Einherjar
{% 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
- Consultez l'exemple sur https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Ou celui sur https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (vous devrez peut-être remplir le tcache)
Objectif
- L'objectif est d'allouer de la mémoire à presque n'importe quelle adresse spécifique.
Exigences
- Créer un faux chunk lorsque nous voulons allouer un chunk :
- Définir des pointeurs pour pointer vers lui-même pour contourner les vérifications de cohérence
- Débordement d'un octet avec un octet nul d'un chunk à l'autre pour modifier le drapeau
PREV_INUSE
. - Indiquer dans la
prev_size
du chunk abusé par le débordement d'un octet la différence entre lui-même et le faux chunk - La taille du faux chunk doit également avoir été définie de la même taille pour contourner les vérifications de cohérence
- Pour construire ces chunks, vous aurez besoin d'une fuite de tas.
Attaque
- Un faux chunk est créé à l'intérieur d'un chunk contrôlé par l'attaquant pointant avec
fd
etbk
vers le chunk d'origine pour contourner les protections - 2 autres chunks (
B
etC
) sont alloués - En abusant du débordement d'un octet dans le chunk
B
, le bitprev in use
est nettoyé et les donnéesprev_size
sont écrasées avec la différence entre l'endroit où le chunkC
est alloué et le faux chunkA
généré précédemment - Ce
prev_size
et la taille dans le faux chunkA
doivent être les mêmes pour contourner les vérifications. - Ensuite, le tcache est rempli
- Ensuite,
C
est libéré pour se consolider avec le faux chunkA
- Ensuite, un nouveau chunk
D
est créé qui commencera dans le faux chunkA
et couvrira le chunkB
- La maison d'Einherjar se termine ici
- Cela peut être poursuivi avec une attaque de fast bin ou un empoisonnement de Tcache :
- Libérer
B
pour l'ajouter au fast bin / Tcache - Le
fd
deB
est écrasé pour le faire pointer vers l'adresse cible en abusant du chunkD
(car il contientB
à l'intérieur) - Ensuite, 2 mallocs sont effectués et le deuxième va allouer l'adresse cible
Références et autres exemples
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Après la libération des pointeurs, ils ne sont pas annulés, il est donc toujours possible d'accéder à leurs données. Par conséquent, un chunk est placé dans le bac non trié et les pointeurs qu'il contient sont divulgués (fuite de libc) puis un nouveau tas est placé dans le bac non trié et une adresse de tas est divulguée à partir du pointeur qu'il reçoit.
- baby-talk. DiceCTF 2024
- Bug de débordement de zéro nul dans
strtok
. - Utilisez la Maison d'Einherjar pour obtenir une situation de chevauchement de chunks et terminez avec un empoisonnement de Tcache pour obtenir un primitive d'écriture arbitraire.
{% 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.