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)
El objetivo de esta técnica sería filtrar una dirección de una función del PLT para poder eludir ASLR. Esto se debe a que si, por ejemplo, filtras la dirección de la función puts
de la libc, puedes entonces calcular dónde está la base de libc
y calcular los desplazamientos para acceder a otras funciones como system
.
Esto se puede hacer con una carga útil de pwntools
como (desde aquí):
Note cómo puts
(usando la dirección del PLT) se llama con la dirección de puts
ubicada en la GOT (Tabla de Desplazamiento Global). Esto se debe a que para cuando puts
imprime la entrada de la GOT de puts, esta entrada contendrá la dirección exacta de puts
en memoria.
También note cómo se utiliza la dirección de main
en el exploit, de modo que cuando puts
termina su ejecución, el binario llama a main
nuevamente en lugar de salir (así que la dirección filtrada seguirá siendo válida).
Note cómo para que esto funcione el binario no puede ser compilado con PIE o debe haber encontrado una filtración para eludir PIE con el fin de conocer la dirección del PLT, GOT y main. De lo contrario, necesita eludir PIE primero.
Puede encontrar un ejemplo completo de esta elusión aquí. Este fue el exploit final de ese ejemplo:
64 bits, ASLR habilitado pero sin PIE, el primer paso es llenar un desbordamiento hasta el byte 0x00 del canario para luego llamar a puts y filtrarlo. Con el canario se crea un gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego un gadget ROP para llamar a system('/bin/sh')
64 bits, ASLR habilitado, sin canario, desbordamiento de pila en main desde una función hija. Gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego llamar a un gadget.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)