Ret2ret & Reo2pop
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Основна мета цієї техніки - спроба обійти ASLR, зловживаючи існуючим вказівником у стеку.
Основна причина переповнення стеку - це зазвичай рядки, і рядки завершуються нульовим байтом в кінці у пам'яті. Це дозволяє спробу зменшити місце, на яке вказує існуючий вказівник, який вже існує в стеці. Таким чином, якщо стек містить 0xbfffffdd
, це переповнення може перетворити його на 0xbfffff00
(зверніть увагу на останній нульований байт).
Якщо ця адреса вказує на наш код оболонки в стеці, можливо зробити потік досягнення цієї адреси, додаючи адреси до інструкції ret
до того моменту, поки досягнеться ця адреса.
Отже, атака буде виглядати наступним чином:
NOP-ковзання
Код оболонки
Перезапис стеку з EIP за допомогою адрес до ret
(RET-ковзання)
0x00, доданий рядком, модифікує адресу зі стеку, змушуючи її вказувати на NOP-ковзання
За посиланням це можна побачити приклад вразливого бінарного файлу, а тут - експлойт.
У випадку, якщо ви можете знайти ідеальний вказівник у стеці, який ви не хочете змінювати (у ret2ret
ми змінюємо останній найнижчий байт на 0x00
), ви можете виконати такий самий напад ret2ret
, але довжина RET-ковзання повинна бути скорочена на 1 (так щоб останній 0x00
перезаписував дані безпосередньо перед ідеальним вказівником), і остання адреса RET-ковзання повинна вказувати на pop <reg>; ret
.
Таким чином, дані перед ідеальним вказівником будуть видалені зі стеку (це дані, які змінюються на 0x00
), і останній ret
буде вказувати на ідеальну адресу у стеці без будь-яких змін.
За посиланням це можна побачити приклад вразливого бінарного файлу, а тут - експлойт.
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)