hacktricks/binary-exploitation/array-indexing.md

4.2 KiB

Indexation de tableau

{% 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
{% endhint %}

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 en raison d'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é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 remplit cette exigence, en tenant compte du fait que le canary ne doit pas être déplacé de sa position et enfin en écrasant le RIP avec une adresse de ret, qui remplit 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, canary, 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 avec pop rdi; ret, et dans la pile est ajoutée l'adresse de main (retournant à main). Ensuite, une chaîne ROP est utilisée pour divulguer l'adresse de put dans la GOT en utilisant puts (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 canary, 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).