mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 08:30:57 +00:00
31 lines
4 KiB
Markdown
31 lines
4 KiB
Markdown
|
# Indexación de Arrays
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
|
||
|
Otras formas de apoyar a HackTricks:
|
||
|
|
||
|
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||
|
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* **Ú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 tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||
|
|
||
|
</details>
|
||
|
|
||
|
## 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, lo que permite 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 se va a utilizar como un número doble y se ordena 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 moverse 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 para que la dirección `exit` de la GOT sea 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` y ejecutará esta cadena en la pila). Finalmente se utiliza una nueva cadena ROP para ejecutar 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).
|