hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie
2024-07-18 17:36:28 +00:00
..
bypassing-canary-and-pie.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:36:28 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:36:28 +00:00

PIE

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

Apoie o HackTricks
{% endhint %}

Informações Básicas

Um binário compilado como PIE, ou Executable de Posição Independente, significa que o programa pode carregar em diferentes locais de memória cada vez que é executado, impedindo 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 se as localizações absolutas mudarem. Para burlar o PIE, você só precisa vazar um endereço, normalmente da pilha usando vulnerabilidades como ataques de string de formato. Uma vez que você tem um endereço, você pode calcular outros pelos seus deslocamentos fixos.

Uma dica útil na exploração de binários PIE é que o endereço base geralmente 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 um verificador crítico se um exploit não estiver funcionando como esperado, indicando se o endereço base correto foi identificado.
Ou você pode usar isso para o 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 localizações.

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, verifique este exemplo)
  • Forçar os valores de EBP e EIP na pilha até vazar os corretos:

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

  • Use 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:Treinamento HackTricks AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)

Apoie o HackTricks
{% endhint %}