Skip to content

Bellek korumaları & bypass

mitigations difficulty: orta

Modern binary’ler birden çok koruma katmanıyla derlenir. Exploit geliştirmenin büyük kısmı, bu korumaları okuyup (checksec) atlatmaktır. Bu sayfa saldırgan açısından: her koruma neyi engeller, tipik bypass nedir.

ASLR/PIE ortamında exploit genelde iki aşamalıdır:

  1. Leak: format string veya puts(puts@GOT) ile bir libc/PIE adresi öğren.

  2. Hesapla: sızan adres − bilinen offset = base; oradan system , /bin/sh .

  3. Kontrol al: ROP/ret2libc / one_gadget ile shell.

from pwn import *
elf, libc = ELF('./chall'), ELF('./libc.so.6')
# ... puts@got leak ...
leak = u64(io.recv(6).ljust(8, b'\x00'))
libc.address = leak - libc.sym.puts
log.success(f'libc @ {hex(libc.address)}')
system = libc.sym.system
binsh = next(libc.search(b'/bin/sh'))
  1. checksec çalıştır — NX/PIE/Canary/RELRO kombinasyonunu not et.

  2. Leak ihtiyacını belirle — PIE veya ASLR varsa en az bir bilgi sızıntısı planla (format string, puts@plt, UAF read).

  3. Yazma hedefini seç — Partial RELRO → GOT; Full → ROP only / hook / stack pivot.

  4. Canary varsa — önce leak veya canary’ye dokunmayan primitive (heap, format %n uzak hedef).

  5. Zinciri kur — local’de gdb.attach ile canary/base doğrula, sonra remote.

Terminal window
pwndbg> checksec
Terminal window
pwndbg> vmmap # ASLR slide
Terminal window
pwndbg> canary # pwndbg yardımcı
Terminal window
pwndbg> got # GOT içerikleri