Tengo un binario de Linux x86-64 vinculado con libc que se ejecuta dinámicamente en Ubuntu 16.04 parcheado de forma remota.
El ejecutable realiza una llamada a libc read y exit, lo que permite un simple desbordamiento de pila en ROP. Ese es el único código compilado en el binario.
-----------------------
gdb-peda$ checksec
CANARY : disabled
FORTIFY : disabled
NX : ENABLED
PIE : disabled
RELRO : Partial
-----------------------
El ASLR completo está habilitado.
No tengo acceso a un gadget de syscall en ninguna dirección conocida, y después de escuchar que vsyscall podría funcionar, aprendí que vsyscall ahora está emulado en versiones más nuevas del kernel y no se puede usar para un gadget de syscall.
He hecho búsquedas manuales para int 0x80, syscall y sysenter con la esperanza de encontrarlas en la sección ejecutable conocida sin ningún resultado.
¿Alguien sabe de alguna forma de explotar este binario sin ninguna dirección conocida, excepto para 'leer'?
Supongo que la única forma que puedo imaginar es leyendo de alguna manera una dirección libc de GOT y ROPing para eliminar la referencia a una nueva función en un nuevo desplazamiento ... pero no puedo encontrar un gadget que lo haga. Déjame desreferenciar.
No puedo usar la corrección de sobrescritura parcial de direcciones porque x86-64 tiene demasiada entropía.
¿Hay alguna técnica que no conozca?
¡Estoy golpeando mi cabeza contra una pared en este!