hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie
2024-12-12 13:56:11 +01:00
..
bypassing-canary-and-pie.md Recreating repository history for branch pt 2024-12-12 13:56:11 +01:00
README.md Recreating repository history for branch pt 2024-12-12 13:56:11 +01:00

PIE

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Informações Básicas

Um binário compilado como PIE, ou Executável Independente de Posição, significa que o programa pode ser carregado em diferentes locais de memória cada vez que é executado, prevenindo endereços codificados.

O truque para explorar esses binários está em explorar os endereços relativos—os deslocamentos entre partes do programa permanecem os mesmos, mesmo que as localizações absolutas mudem. Para burlar o PIE, você só precisa vazar um endereço, tipicamente da pilha usando vulnerabilidades como ataques de string de formato. Uma vez que você tenha um endereço, pode calcular outros por seus deslocamentos fixos.

Uma dica útil na exploração de binários PIE é que seu endereço base normalmente termina em 000 devido às páginas de memória serem as unidades de randomização, com tamanho de 0x1000 bytes. Este alinhamento pode ser uma verificação crítica se um exploit não está funcionando como esperado, indicando se o endereço base correto foi identificado.
Ou você pode usar isso para seu exploit, se você vazar que um endereço está localizado em 0x649e1024 você sabe que o endereço base é 0x649e1000 e a partir daí você pode apenas calcular deslocamentos de funções e locais.

Bypasses

Para burlar o PIE, é necessário vazar algum endereço do binário carregado, existem algumas opções para isso:

  • ASLR desativado: Se o ASLR estiver desativado, um binário compilado com PIE sempre será carregado no mesmo endereço, portanto o PIE será inútil já que os endereços dos objetos sempre estarão no mesmo lugar.
  • Ser dado o vazamento (comum em desafios CTF fáceis, ver este exemplo)
  • Forçar valores EBP e EIP na pilha até que você vaze os corretos:

{% content-ref url="bypassing-canary-and-pie.md" %} bypassing-canary-and-pie.md {% endcontent-ref %}

  • Usar uma vulnerabilidade de leitura arbitrária, como string de formato para vazar um endereço do binário (por exemplo, da pilha, como na técnica anterior) para obter a base do binário e usar deslocamentos a partir daí. Encontre um exemplo aqui.

Referências

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}