Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.

This commit is contained in:
Translator 2024-09-25 16:50:42 +00:00
parent 9991d5d4b7
commit 06142d5340

View file

@ -48,7 +48,7 @@ mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Можливо, ви не знаєте жодної адреси, куди можна записати, і вам **потрібна інструкція `ret`**. Зверніть увагу, що другий гаджет також **закінчиться на `ret`**, але вам потрібно буде виконати деякі **умови**, щоб досягти його:
3. Можливо, ви не знаєте жодної адреси, куди можна записати, і вам **потрібна інструкція `ret`**. Зверніть увагу, що другий гаджет також **закінчиться на `ret`**, але вам потрібно буде виконати деякі **умови**, щоб досягти його:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -94,7 +94,7 @@ gef➤ search-pattern 0x400560
Уявіть, що ви хочете зробити системний виклик або викликати функцію, таку як `write()`, але вам потрібні конкретні значення в регістрах `rdx` та `rsi` як параметри. Зазвичай ви шукали б гаджети, які безпосередньо встановлюють ці регістри, але не можете знайти жодного.
Ось де **ret2csu** вступає в гру:
Ось тут і вступає в гру **ret2csu**:
1. **Налаштуйте регістри**: Використовуйте перший магічний гаджет, щоб витягти значення зі стеку та помістити їх у rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) та r15.
2. **Використовуйте другий гаджет**: З цими налаштованими регистрами ви використовуєте другий гаджет. Це дозволяє вам перемістити вибрані значення в `rdx` та `rsi` (з r14 та r13 відповідно), готуючи параметри для виклику функції. Більше того, контролюючи `r15` та `rbx`, ви можете змусити програму викликати функцію, розташовану за адресою, яку ви обчислюєте та поміщаєте в `[r15 + rbx*8]`.