mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 16:10:54 +00:00
4.2 KiB
4.2 KiB
Maison d'Einherjar
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!
Autres façons de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT !
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez vos 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écalage d'un sur un d'un chunk à un autre pour modifier le prev in use
- Indiquer dans le
prev_size
du chunk abusé par décalage d'un 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écalage d'un dans le
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 qu'il se consolide 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 :
- Libérer
B
pour l'ajouter au fast bin - 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
- 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 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.