mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
4.2 KiB
4.2 KiB
Indexation de tableau
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!
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
Cette catégorie inclut toutes les vulnérabilités qui se produisent parce qu'il est possible de remplacer certaines données par des erreurs dans la manipulation des index dans les tableaux. Il s'agit d'une catégorie très large sans méthodologie spécifique car le mécanisme d'exploitation repose entièrement sur les conditions de la vulnérabilité.
Cependant, vous pouvez trouver quelques exemples intéressants :
- https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html
- Il y a 2 tableaux en collision, un pour les adresses où les données sont stockées et un avec les tailles de ces données. Il est possible de remplacer l'un par l'autre, permettant d'écrire une adresse arbitraire en la désignant comme une taille. Cela permet d'écrire l'adresse de la fonction
free
dans la table GOT, puis de la remplacer par l'adresse desystem
, et d'appeler free à partir d'une mémoire avec/bin/sh
. - https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html
- 64 bits, pas de nx. Remplacez une taille pour obtenir une sorte de dépassement de tampon où tout va être utilisé comme un double nombre et trié du plus petit au plus grand, il est donc nécessaire de créer un shellcode qui répond à cette exigence, en tenant compte du fait que le canari ne doit pas être déplacé de sa position et enfin en écrasant le RIP avec une adresse de ret, qui répond aux exigences précédentes et en plaçant l'adresse la plus grande une nouvelle adresse pointant vers le début de la pile (fuitée par le programme) afin de pouvoir utiliser le ret pour sauter là-bas.
- https://faraz.faith/2019-10-20-secconctf-2019-sum/
- 64 bits, pas de relro, canari, nx, pas de pie. Il y a un décalage d'un octet dans un tableau dans la pile qui permet de contrôler un pointeur accordant WWW (il écrit la somme de tous les nombres du tableau dans l'adresse écrasée par le décalage d'un octet dans le tableau). La pile est contrôlée de sorte que l'adresse
exit
de la GOT est écrasée parpop rdi; ret
, et dans la pile est ajoutée l'adresse demain
(retournant àmain
). Ensuite, une chaîne ROP pour divulguer l'adresse mise dans la GOT en utilisant puts est utilisée (exit
sera appelé donc il appellerapop rdi; ret
exécutant ainsi cette chaîne dans la pile). Enfin, une nouvelle chaîne ROP exécutant ret2lib est utilisée. - https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
- 32 bits, pas de relro, pas de canari, nx, pie. Abuser d'un mauvais index pour divulguer des adresses de libc et de tas à partir de la pile. Abuser du dépassement de tampon pour effectuer un ret2lib appelant
system('/bin/sh')
(l'adresse du tas est nécessaire pour contourner une vérification).