hacktricks/binary-exploitation/array-indexing.md

31 lines
4.2 KiB
Markdown
Raw Normal View History

# Indexation de tableau
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
</details>
## 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](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](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/](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 par `pop rdi; ret`, et dans la pile est ajoutée l'adresse de `main` (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 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](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).