# Indexaci贸n de Arrays
{% hint style="success" %}
Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}
## Informaci贸n B谩sica
Esta categor铆a incluye todas las vulnerabilidades que ocurren porque es posible sobrescribir ciertos datos a trav茅s de errores en el manejo de 铆ndices en arrays. Es una categor铆a muy amplia sin una metodolog铆a espec铆fica, ya que el mecanismo de explotaci贸n depende completamente de las condiciones de la vulnerabilidad.
Sin embargo, aqu铆 puedes encontrar algunos **ejemplos** interesantes:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Hay **2 arrays colisionando**, uno para las **direcciones** donde se almacenan los datos y otro con los **tama帽os** de esos datos. Es posible sobrescribir uno desde el otro, permitiendo escribir una direcci贸n arbitraria indic谩ndola como un tama帽o. Esto permite escribir la direcci贸n de la funci贸n `free` en la tabla GOT y luego sobrescribirla con la direcci贸n de `system`, y llamar a free desde una memoria con `/bin/sh`.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 bits, sin nx. Sobrescribe un tama帽o para obtener una especie de desbordamiento de b煤fer donde todo va a ser utilizado como un n煤mero doble y ordenado de menor a mayor, por lo que es necesario crear un shellcode que cumpla con ese requisito, teniendo en cuenta que el canary no debe ser movido de su posici贸n y finalmente sobrescribir el RIP con una direcci贸n a ret, que cumpla con los requisitos anteriores y colocando la mayor direcci贸n una nueva direcci贸n apuntando al inicio del stack (filtrada por el programa) para que sea posible usar el ret para saltar all铆.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64 bits, sin relro, canary, nx, sin pie. Hay un off-by-one en un array en la pila que permite controlar un puntero otorgando WWW (escribe la suma de todos los n煤meros del array en la direcci贸n sobrescrita por el off-by-one en el array). La pila est谩 controlada, por lo que la direcci贸n `exit` de la GOT es sobrescrita con `pop rdi; ret`, y en la pila se agrega la direcci贸n a `main` (volviendo a `main`). Se utiliza una cadena ROP para filtrar la direcci贸n de put en la GOT usando puts (`exit` ser谩 llamado, por lo que llamar谩 a `pop rdi; ret` ejecutando as铆 esta cadena en la pila). Finalmente se utiliza una nueva cadena ROP ejecutando ret2lib.
* [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, sin relro, sin canary, nx, pie. Abusa de un mal indexado para filtrar direcciones de libc y heap desde la pila. Abusa del desbordamiento de b煤fer para hacer un ret2lib llamando a `system('/bin/sh')` (se necesita la direcci贸n del heap para evitar una comprobaci贸n).