Lion Cipher Lab

Defeat ASLR with no leak: forge the dynamic linker's resolver structures (ret2dlresolve) in your own lab

Why it matters

The ret2libc lab defeated ASLR (Address Space Layout Randomisation — the OS defense that loads libc, the stack and the heap at a different random base every run) by LEAKING a runtime address and doing arithmetic. But that assumed you had a leak primitive at all — a puts() you could point at the GOT, a format string, something. Plenty of real targets give you a clean stack overflow and nothing else: no output you can steer, no second bug to leak with. ret2dlresolve is the answer to exactly that dead end. Instead of leaking libc, you turn the dynamic linker — the loader that normally resolves…

What you'll learn

Steps in this lab

  1. Read this first: your own machine, your own binary, authorized-only
  2. Where the ret2libc lab left you — and the case it could not solve
  3. The machinery: PLT, GOT, lazy binding, and _dl_runtime_resolve
  4. The idea: forge the structures and let the loader resolve system() for you
  5. Why this needs a writable, non-PIE region — meet .bss
  6. Get Linux and the exploit tooling
  7. Pick a target: your own binary, or a ROP Emporium challenge
  8. Compile it into the exact vulnerable profile — and confirm it
  9. Find the offset and a way to control the first argument
  10. Build the payload with Ret2dlresolvePayload — and know every field
  11. The way a pro does it: verify the forgery in gdb
  12. The judgment: when ret2dlresolve is right — and exactly when it fails
  13. Prove the limits yourself, then clean up

Open the full interactive lab →