6.2 KiB
AW2Exec - GOT/PLT
{% 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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
GOT: Tabela de Deslocamento Global
A Tabela de Deslocamento Global (GOT) é um mecanismo usado em binários vinculados dinamicamente para gerenciar os endereços de funções externas. Como esses endereços não são conhecidos até o tempo de execução (devido ao vínculo dinâmico), a GOT fornece uma maneira de atualizar dinamicamente os endereços desses símbolos externos uma vez que são resolvidos.
Cada entrada na GOT corresponde a um símbolo nas bibliotecas externas que o binário pode chamar. Quando uma função é chamada pela primeira vez, seu endereço real é resolvido pelo vinculador dinâmico e armazenado na GOT. Chamadas subsequentes para a mesma função usam o endereço armazenado na GOT, evitando assim a sobrecarga de resolver o endereço novamente.
PLT: Tabela de Ligação de Procedimentos
A Tabela de Ligação de Procedimentos (PLT) trabalha em estreita colaboração com a GOT e serve como um trampolim para lidar com chamadas a funções externas. Quando um binário chama uma função externa pela primeira vez, o controle é passado para uma entrada na PLT associada a essa função. Esta entrada da PLT é responsável por invocar o vinculador dinâmico para resolver o endereço da função, caso ainda não tenha sido resolvido. Após o endereço ser resolvido, ele é armazenado na GOT.
Portanto, as entradas da GOT são usadas diretamente uma vez que o endereço de uma função ou variável externa é resolvido. As entradas da PLT são usadas para facilitar a resolução inicial desses endereços via o vinculador dinâmico.
Obter Execução
Verifique a GOT
Obtenha o endereço da tabela GOT com: objdump -s -j .got ./exec
Observe como após carregar o executável no GEF você pode ver as funções que estão na GOT: gef➤ x/20x 0xADDR_GOT
Usando o GEF você pode iniciar uma sessão de debugging e executar got
para ver a tabela got:
GOT2Exec
Em um binário, a GOT tem os endereços para as funções ou para a seção PLT que irá carregar o endereço da função. O objetivo desta escrita arbitrária é substituir uma entrada da GOT de uma função que será executada mais tarde com o endereço da PLT da função system
por exemplo.
Idealmente, você irá substituir a GOT de uma função que está prestes a ser chamada com parâmetros controlados por você (assim você poderá controlar os parâmetros enviados para a função system).
Se system
não for usado pelo script, a função system não terá uma entrada na PLT. Nesse cenário, você precisará vazar primeiro o endereço da função system
e então sobrescrever a GOT para apontar para esse endereço.
Você pode ver os endereços da PLT com objdump -j .plt -d ./vuln_binary
One Gadget
{% content-ref url="../one-gadget.md" %} one-gadget.md {% endcontent-ref %}
Proteções
A proteção Full RELRO é destinada a proteger contra esse tipo de técnica resolvendo todos os endereços das funções quando o binário é iniciado e tornando a tabela GOT somente leitura após isso:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} relro.md {% endcontent-ref %}
Referências
- https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
{% 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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.