mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.
This commit is contained in:
parent
8e1c9a4687
commit
7a9a36436d
1 changed files with 7 additions and 7 deletions
|
@ -48,7 +48,7 @@ mov rsi, r14;
|
|||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
2. 也许你不知道要写入哪个地址,并且你**需要一个 `ret` 指令**。请注意,第二个 gadget 也将**以 `ret` 结束**,但你需要满足一些**条件**才能到达它:
|
||||
3. 也许你不知道要写入的地址,并且你**需要一个 `ret` 指令**。请注意,第二个 gadget 也将**以 `ret` 结束**,但你需要满足一些**条件**才能到达它:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -78,7 +78,7 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
## RDI 和 RSI
|
||||
|
||||
从 ret2csu gadget 控制 **`rdi`** 和 **`rsi`** 的另一种方法是通过访问特定的偏移量:
|
||||
通过访问特定的偏移量,从 ret2csu gadget 控制 **`rdi`** 和 **`rsi`** 的另一种方法是:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
|
@ -92,14 +92,14 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
### 使用调用
|
||||
|
||||
想象一下,你想进行系统调用或调用像 `write()` 这样的函数,但需要在 `rdx` 和 `rsi` 寄存器中作为参数的特定值。通常,你会寻找直接设置这些寄存器的 gadgets,但你找不到任何。
|
||||
想象一下,您想要进行系统调用或调用像 `write()` 这样的函数,但需要在 `rdx` 和 `rsi` 寄存器中作为参数的特定值。通常,您会寻找直接设置这些寄存器的 gadgets,但您找不到任何。
|
||||
|
||||
这时 **ret2csu** 就派上用场了:
|
||||
这时 **ret2csu** 发挥作用:
|
||||
|
||||
1. **设置寄存器**:使用第一个魔法 gadget 从栈中弹出值并放入 rbx、rbp、r12(edi)、r13(rsi)、r14(rdx)和 r15。
|
||||
2. **使用第二个 gadget**:在这些寄存器设置好后,使用第二个 gadget。这使你能够将所选值移动到 `rdx` 和 `rsi`(分别来自 r14 和 r13),为函数调用准备参数。此外,通过控制 `r15` 和 `rbx`,你可以使程序调用位于你计算并放入 `[r15 + rbx*8]` 的地址的函数。
|
||||
2. **使用第二个 gadget**:在设置好这些寄存器后,您使用第二个 gadget。这使您能够将所选值移动到 `rdx` 和 `rsi`(分别来自 r14 和 r13),为函数调用准备参数。此外,通过控制 `r15` 和 `rbx`,您可以使程序调用位于您计算并放入 `[r15 + rbx*8]` 的地址的函数。
|
||||
|
||||
你可以在这里找到一个 [**使用此技术并解释的示例**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation),这是它使用的最终利用:
|
||||
您可以在这里找到一个 [**使用此技术并解释的示例**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation),这是它使用的最终利用:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -181,4 +181,4 @@ target.interactive()
|
|||
```
|
||||
### 为什么不直接使用libc?
|
||||
|
||||
通常这些情况也容易受到[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)的攻击,但有时你需要控制比直接在libc中找到的gadgets更复杂的参数。例如,`write()`函数需要三个参数,而**直接找到设置所有这些的gadgets可能是不可能的**。
|
||||
通常这些情况也容易受到[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)的攻击,但有时你需要控制的参数比直接在libc中找到的gadgets更复杂。例如,`write()`函数需要三个参数,而**直接找到设置所有这些的gadgets可能是不可能的**。
|
||||
|
|
Loading…
Reference in a new issue