mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
34 lines
3.7 KiB
Markdown
34 lines
3.7 KiB
Markdown
# Ret2ret & Reo2pop
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## Ret2ret
|
||
|
||
Основна **мета** цієї техніки полягає в тому, щоб **обійти ASLR, зловживаючи існуючим вказівником у стеку**.
|
||
|
||
В основному, переповнення стеку зазвичай викликане рядками, і **рядки закінчуються нульовим байтом в кінці** в пам'яті. Це дозволяє спробувати зменшити місце, на яке вказує існуючий вказівник, вже існуючий у стеку. Тож, якщо стек містив `0xbfffffdd`, це переповнення могло б перетворити його на `0xbfffff00` (зверніть увагу на останній нульовий байт).
|
||
|
||
Якщо ця адреса вказує на наш shellcode у стеку, можливо, змусити потік досягти цієї адреси, **додаючи адреси до інструкції `ret`** до тих пір, поки вона не буде досягнута.
|
||
|
||
Отже, атака виглядатиме так:
|
||
|
||
- NOP sled
|
||
- Shellcode
|
||
- Перезаписати стек з EIP з **адресами до `ret`** (RET sled)
|
||
- 0x00, доданий рядком, модифікує адресу зі стеку, змушуючи її вказувати на NOP sled
|
||
|
||
Слідуючи [**за цим посиланням**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c), ви можете побачити приклад вразливого бінарного файлу, а [**в цьому**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) - експлойт.
|
||
|
||
## Ret2pop
|
||
|
||
У разі, якщо ви можете знайти **ідеальний вказівник у стеку, який не хочете модифікувати** (в `ret2ret` ми змінюємо останній найменший байт на `0x00`), ви можете виконати ту ж атаку `ret2ret`, але **довжина RET sled повинна бути скорочена на 1** (щоб останній `0x00` перезаписав дані безпосередньо перед ідеальним вказівником), а **остання** адреса RET sled повинна вказувати на **`pop <reg>; ret`**.\
|
||
Таким чином, **дані перед ідеальним вказівником будуть видалені** зі стеку (це дані, на які вплине `0x00`), а **остання `ret` вказуватиме на ідеальну адресу** у стеку без будь-яких змін.
|
||
|
||
Слідуючи [**за цим посиланням**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c), ви можете побачити приклад вразливого бінарного файлу, а [**в цьому**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) - експлойт.
|
||
|
||
## References
|
||
|
||
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md)
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|