Ret2ret & Reo2pop

Reading time: 3 minutes

tip

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

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

Ret2ret

Основна мета цієї техніки полягає в тому, щоб обійти ASLR, зловживаючи існуючим вказівником у стеку.

В основному, переповнення стеку зазвичай викликане рядками, і рядки закінчуються нульовим байтом в кінці в пам'яті. Це дозволяє спробувати зменшити місце, на яке вказує існуючий вказівник, вже існуючий у стеку. Тож, якщо стек містив 0xbfffffdd, це переповнення могло б перетворити його на 0xbfffff00 (зверніть увагу на останній нульовий байт).

Якщо ця адреса вказує на наш shellcode у стеку, можливо, змусити потік досягти цієї адреси, додаючи адреси до інструкції ret до тих пір, поки вона не буде досягнута.

Отже, атака виглядатиме так:

  • NOP sled
  • Shellcode
  • Перезаписати стек з EIP з адресами до ret (RET sled)
  • 0x00, доданий рядком, модифікує адресу зі стеку, змушуючи її вказувати на NOP sled

Слідуючи за цим посиланням, ви можете побачити приклад вразливого бінарного файлу, а в цьому - експлойт.

Ret2pop

У разі, якщо ви можете знайти ідеальний вказівник у стеку, який не хочете модифікуватиret2ret ми змінюємо останній найменший байт на 0x00), ви можете виконати ту ж атаку ret2ret, але довжина RET sled повинна бути скорочена на 1 (щоб останній 0x00 перезаписав дані безпосередньо перед ідеальним вказівником), а остання адреса RET sled повинна вказувати на pop <reg>; ret.
Таким чином, дані перед ідеальним вказівником будуть видалені зі стеку (це дані, на які вплине 0x00), а остання ret вказуватиме на ідеальну адресу у стеку без будь-яких змін.

Слідуючи за цим посиланням, ви можете побачити приклад вразливого бінарного файлу, а в цьому - експлойт.

References

tip

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

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