PIE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 una verificación crítica 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 simplemente calcular los desplazamientos de funciones y ubicaciones.
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 proporcionado 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:
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í.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)