mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
4.2 KiB
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
- 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
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 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 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 avecpop rdi; ret
, et dans la pile est ajoutée l'adresse demain
(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 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 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).