hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie
2024-05-05 22:04:08 +00:00
..
bypassing-canary-and-pie.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-05-05 22:04:08 +00:00
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 02:15:58 +00:00

PIE

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

Um binário compilado como PIE, ou Position Independent Executable, 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 deles 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 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, 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

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks: