PIE

Reading time: 3 minutes

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks

Informaci贸n B谩sica

Un binario compilado como PIE, o Ejecutable Independiente de Posici贸n, significa que el programa puede cargarse en diferentes ubicaciones de memoria cada vez que se ejecuta, evitando direcciones codificadas.

El truco para explotar estos binarios radica en explotar las direcciones relativas: los desplazamientos entre partes del programa permanecen iguales incluso si las ubicaciones absolutas cambian. Para eludir PIE, solo necesitas filtrar una direcci贸n, t铆picamente desde la pila utilizando vulnerabilidades como ataques de formato de cadena. Una vez que tienes una direcci贸n, puedes calcular otras por sus desplazamientos fijos.

Una pista 煤til al explotar binarios PIE es que su direcci贸n base t铆picamente termina en 000 debido a que las p谩ginas de memoria son las unidades de aleatorizaci贸n, con un tama帽o de 0x1000 bytes. Esta alineaci贸n puede ser un chequeo cr铆tico si un exploit no est谩 funcionando como se esperaba, indicando si se ha identificado la direcci贸n base correcta.
O puedes usar esto para tu exploit, si filtras que una direcci贸n est谩 ubicada en 0x649e1024 sabes que la direcci贸n base es 0x649e1000 y desde ah铆 puedes calcular los desplazamientos de funciones y ubicaciones.

Bypasses

Para eludir PIE es necesario filtrar alguna direcci贸n del binario cargado, hay algunas opciones para esto:

  • ASLR deshabilitado: Si ASLR est谩 deshabilitado, un binario compilado con PIE siempre se cargar谩 en la misma direcci贸n, por lo tanto PIE ser谩 in煤til ya que las direcciones de los objetos siempre estar谩n en el mismo lugar.
  • Ser dado el leak (com煤n en desaf铆os CTF f谩ciles, ver este ejemplo)
  • Fuerza bruta de los valores EBP y EIP en la pila hasta que filtren los correctos:

BF Addresses in the Stack

  • Usar una vulnerabilidad de lectura arbitraria como formato de cadena para filtrar una direcci贸n del binario (por ejemplo, desde la pila, como en la t茅cnica anterior) para obtener la base del binario y usar desplazamientos desde all铆. Encuentra un ejemplo aqu铆.

Referencias

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks