mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.
This commit is contained in:
parent
ba8a10e3ea
commit
1d30a3e973
1 changed files with 3 additions and 3 deletions
|
@ -48,7 +48,7 @@ mov rsi, r14;
|
|||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
2. Może nie znasz żadnego adresu, aby tam napisać i **potrzebujesz instrukcji `ret`**. Zauważ, że drugi gadżet również **kończy się na `ret`**, ale będziesz musiał spełnić pewne **warunki**, aby do niego dotrzeć:
|
||||
3. Może nie znasz żadnego adresu, aby tam zapisać i **potrzebujesz instrukcji `ret`**. Zauważ, że drugi gadżet również **kończy się na `ret`**, ale będziesz musiał spełnić pewne **warunki**, aby do niego dotrzeć:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -63,7 +63,7 @@ ret
|
|||
Warunki będą następujące:
|
||||
|
||||
* `[r12 + rbx*8]` musi wskazywać na adres przechowujący wywoływalną funkcję (jeśli nie masz pomysłu i nie ma pie, możesz po prostu użyć funkcji `_init`):
|
||||
* Jeśli \_init znajduje się pod adresem `0x400560`, użyj GEF, aby wyszukać wskaźnik w pamięci do niego i spraw, aby `[r12 + rbx*8]` był adresem z wskaźnikiem do \_init:
|
||||
* Jeśli \_init znajduje się pod `0x400560`, użyj GEF, aby wyszukać wskaźnik w pamięci do niej i spraw, aby `[r12 + rbx*8]` był adresem z wskaźnikiem do \_init:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
gef➤ search-pattern 0x400560
|
||||
|
@ -97,7 +97,7 @@ Wyobraź sobie, że chcesz wykonać syscall lub wywołać funkcję taką jak `wr
|
|||
Tutaj wchodzi w grę **ret2csu**:
|
||||
|
||||
1. **Ustaw rejestry**: Użyj pierwszego magicznego gadżetu, aby zrzucić wartości ze stosu do rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
|
||||
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczasz i umieszczasz w `[r15 + rbx*8]`.
|
||||
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczysz i umieścisz w `[r15 + rbx*8]`.
|
||||
|
||||
Masz [**przykład używający tej techniki i wyjaśniający to tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a to jest ostateczny exploit, który wykorzystano:
|
||||
```python
|
||||
|
|
Loading…
Add table
Reference in a new issue