3

While doing binary exploitation and studying the case when ASLR is enabled, I noticed I could make a reliable exploit by leaking an address of a function in the binary and finding the address of system in libc by adding a constant offset to that function.

So the binary is e.g. loaded at 0xb7719000, the function is at 0xb7719bc7. libc is loaded at 0xb753c000 and system is at 0xb757c190.

ASLR is enabled:

$ cat /proc/sys/kernel/randomize_va_space
2

The binary is compiled as PIE:

gdb-peda$ checksec
CANARY    : ENABLED
FORTIFY   : disabled
NX        : ENABLED
PIE       : ENABLED
RELRO     : FULL

My question resolves around the fact that I can use a leaked address in the binary to calculate reliably the address of system (which was practical, but I do not understand why).

Is the address difference between libc and the binary always a constant, even when ASLR is enabled and for a PIE executable? One would think intuitively, that both the binary as well as libc would be randomized separataly, and thus have a non constant difference.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.