PIE
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
Бінарний файл, скомпільований як PIE, або Position Independent Executable, означає, що програма може завантажуватися в різних місцях пам'яті щоразу, коли вона виконується, запобігаючи жорстко закодованим адресам.
Трюк для експлуатації цих бінарних файлів полягає в експлуатації відносних адрес — зміщення між частинами програми залишаються незмінними, навіть якщо абсолютні місця змінюються. Щоб обійти PIE, вам потрібно лише витікати одну адресу, зазвичай з стека, використовуючи вразливості, такі як атаки форматних рядків. Як тільки у вас є адреса, ви можете обчислити інші за їхніми фіксованими зміщеннями.
Корисна підказка при експлуатації бінарних файлів PIE полягає в тому, що їх базова адреса зазвичай закінчується на 000 через те, що сторінки пам'яті є одиницями рандомізації, розміром 0x1000 байт. Це вирівнювання може бути критичною перевіркою, якщо експлуатація не працює так, як очікувалося, вказуючи на те, чи була ідентифікована правильна базова адреса.
Або ви можете використовувати це для вашої експлуатації, якщо ви витікаєте, що адреса знаходиться за 0x649e1024
, ви знаєте, що базова адреса 0x649e1000
і з цього ви можете просто обчислити зміщення функцій і місць.
Обходи
Щоб обійти PIE, потрібно витикувати якусь адресу завантаженого бінарного файлу, для цього є кілька варіантів:
- Вимкнений ASLR: Якщо ASLR вимкнено, бінарний файл, скомпільований з PIE, завжди буде завантажуватися за тією ж адресою, отже, PIE буде марним, оскільки адреси об'єктів завжди будуть в одному і тому ж місці.
- Отримати витік (поширено в простих CTF завданнях, перевірте цей приклад)
- Брутфорсити значення EBP та EIP у стеці, поки не витечете правильні:
- Використовуйте вразливість произвольного читання, таку як форматний рядок, щоб витікати адресу бінарного файлу (наприклад, зі стека, як у попередній техніці), щоб отримати базу бінарного файлу та використовувати зміщення звідти. Знайдіть приклад тут.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.