Facendo lo sfruttamento binario e studiando il caso in cui l'ASLR è abilitato, ho notato che potevo fare un exploit affidabile perdendo un indirizzo di una funzione nel binario e trovando l'indirizzo del sistema in libc aggiungendo un offset costante a quella funzione .
Quindi il binario è ad es. caricato a 0xb7719000
, la funzione è a 0xb7719bc7
.
libc è caricato a 0xb753c000
e il sistema è a 0xb757c190
.
ASLR è abilitato:
$ cat /proc/sys/kernel/randomize_va_space
2
Il file binario è compilato come PIE:
gdb-peda$ checksec
CANARY : ENABLED
FORTIFY : disabled
NX : ENABLED
PIE : ENABLED
RELRO : FULL
La mia domanda si risolve sul fatto che posso usare un indirizzo trapelato nel binario per calcolare in modo affidabile l'indirizzo del sistema (che era pratico, ma non capisco perché).
La differenza di indirizzo tra libc e binario è sempre una costante, anche quando ASLR è abilitato e per un eseguibile PIE? Uno penserebbe intuitivamente, che sia il binario che il libc sarebbero randomizzati separatisti, e quindi hanno una differenza non costante.