Quindi ho un binario Linux x86-64 collegato con libc che funziona dinamicamente su Ubuntu 16.04 con patch da remoto.
L'eseguibile fa una chiamata a libc per leggere ed uscire, permettendo un semplice overflow dello stack in ROP. Questo è l'unico codice compilato nel file binario.
-----------------------
gdb-peda$ checksec
CANARY : disabled
FORTIFY : disabled
NX : ENABLED
PIE : disabled
RELRO : Partial
-----------------------
ASLR completo abilitato.
Non ho accesso a un gadget syscall a nessun indirizzo conosciuto e, dopo aver sentito che vsyscall potrebbe funzionare, ho appreso che vsyscall è ora emulato nelle versioni più recenti del kernel e non può essere utilizzato per un gadget syscall.
Ho fatto ricerche manuali per int 0x80, syscall e sysenter sperando di trovarle nella sezione eseguibile conosciuta senza alcun risultato.
Qualcuno sa in qualche modo di sfruttare questo binario senza alcun indirizzo conosciuto tranne che per 'leggere'?
Suppongo che l'unico modo che posso immaginare sia di leggere in qualche modo un indirizzo libc da GOT e ROPing nel dereferenziare quell'indirizzo in una nuova funzione a un nuovo offset ... ma non riesco nemmeno a trovare un gadget che possa fammi dereferenziare.
Non posso usare l'indirizzo parziale sovrascrivere bruteforcing perché x86-64 ha troppa entropia.
C'è qualche tecnica che non conosco?
Sto sbattendo la testa contro un muro su questo!