hacktricks/binary-exploitation/array-indexing.md

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 :

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 de system, 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ébordement 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 satisfait 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 satisfait les 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 GOT exit est écrasée avec pop rdi; ret, et dans la pile est ajoutée l'adresse de main (retour à 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 appellera pop 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ébordement de tampon pour effectuer un ret2lib appelant system('/bin/sh') (l'adresse du tas est nécessaire pour contourner une vérification).