Ret2plt
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
O objetivo desta técnica seria vazar um endereço de uma função do PLT para conseguir contornar o ASLR. Isso ocorre porque, se, por exemplo, você vazar o endereço da função puts
da libc, você pode então calcular onde está a base da libc
e calcular offsets para acessar outras funções como system
.
Isso pode ser feito com um payload pwntools
como (a partir daqui):
Note como puts
(usando o endereço do PLT) é chamado com o endereço de puts
localizado na GOT (Tabela de Deslocamento Global). Isso ocorre porque, quando puts
imprime a entrada da GOT de puts, esta entrada conterá o endereço exato de puts
na memória.
Também note como o endereço de main
é usado no exploit, então quando puts
termina sua execução, o binário chama main
novamente em vez de sair (assim o endereço vazado continuará a ser válido).
Note como, para que isso funcione, o binário não pode ser compilado com PIE ou você deve ter encontrado um leak para contornar o PIE a fim de saber o endereço do PLT, GOT e main. Caso contrário, você precisa contornar o PIE primeiro.
Você pode encontrar um exemplo completo desse bypass aqui. Este foi o exploit final daquele exemplo:
64 bits, ASLR habilitado, mas sem PIE, o primeiro passo é preencher um overflow até o byte 0x00 do canário para então chamar puts e vazar. Com o canário, um gadget ROP é criado para chamar puts e vazar o endereço de puts da GOT e então um gadget ROP para chamar system('/bin/sh')
64 bits, ASLR habilitado, sem canário, overflow de pilha na função principal a partir de uma função filha. Gadget ROP para chamar puts e vazar o endereço de puts da GOT e então chamar um gadget.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)