5.7 KiB
AW2Exec - GOT/PLT
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os 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 com ligação dinâmica 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 à ligação dinâmica), 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 linkador dinâmico e armazenado na GOT. Chamadas subsequentes para a mesma função usam o endereço armazenado na GOT, evitando assim o custo de resolver o endereço novamente.
PLT: Tabela de Ligação de Procedimentos
A Tabela de Ligação de Procedimentos (PLT) trabalha em conjunto 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 linkador dinâmico para resolver o endereço da função se ainda não tiver 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 linkador dinâmico.
Obter Execução
Verificar 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 0xDIR_GOT
Usando o GEF você pode iniciar uma sessão de depuração e executar got
para ver a tabela got:
GOT2Exec
Em um binário, a GOT tem os endereços das funções ou da seção PLT que 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 posteriormente com o endereço do PLT da função system
por exemplo.
Idealmente, você irá substituir a GOT de uma função que está sendo 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 usada pelo script, a função system não terá uma entrada na PLT. Neste cenário, você precisará vazar primeiro o endereço da função system
e então sobrescrever a GOT para apontar para este endereço.
Você pode ver os endereços da PLT com objdump -j .plt -d ./vuln_binary
Proteções
A proteção FullRELRO visa 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 depois disso:
{% content-ref url="../common-binary-protections/relro.md" %} relro.md {% endcontent-ref %}
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.