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.
Anahtar fikir: leak → hesapla → yaz
Section titled “Anahtar fikir: leak → hesapla → yaz”ASLR/PIE ortamında exploit genelde iki aşamalıdır:
-
Leak: format string veya puts(puts@GOT) ile bir libc/PIE adresi öğren.
-
Hesapla: sızan adres − bilinen offset = base; oradan system , /bin/sh .
-
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.putslog.success(f'libc @ {hex(libc.address)}')system = libc.sym.systembinsh = next(libc.search(b'/bin/sh'))checksec → strateji
Section titled “checksec → strateji”-
checksec çalıştır — NX/PIE/Canary/RELRO kombinasyonunu not et.
-
Leak ihtiyacını belirle — PIE veya ASLR varsa en az bir bilgi sızıntısı planla (format string, puts@plt, UAF read).
-
Yazma hedefini seç — Partial RELRO → GOT; Full → ROP only / hook / stack pivot.
-
Canary varsa — önce leak veya canary’ye dokunmayan primitive (heap, format %n uzak hedef).
-
Zinciri kur — local’de gdb.attach ile canary/base doğrula, sonra remote.
GDB’de korumaları görme
Section titled “GDB’de korumaları görme”pwndbg> checksecpwndbg> vmmap # ASLR slidepwndbg> canary # pwndbg yardımcıpwndbg> got # GOT içerikleri