PIE

Apoya a HackTricks

Información Básica

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

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 burlar el PIE, solo necesitas filtrar una dirección, típicamente desde el stack 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 para 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. Este alineamiento puede ser una verificación crítica si un exploit no está funcionando como se espera, 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 allí simplemente puedes calcular desplazamientos de funciones y ubicaciones.

Bypasses

Para burlar el 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, el PIE será inútil ya que las direcciones de los objetos siempre estarán en el mismo lugar.

  • Que te den la filtración (común en desafíos CTF fáciles, ver este ejemplo)

  • Fuerza bruta en los valores de EBP y EIP en el stack hasta que filtres los correctos:

BF Addresses in the Stack
  • Utiliza una vulnerabilidad de lectura arbitraria como format string para filtrar una dirección del binario (por ejemplo, desde el stack, como en la técnica anterior) para obtener la base del binario y usar desplazamientos desde allí. Encuentra un ejemplo aquí.

Referencias

Apoya a HackTricks

Last updated