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

Основна інформація

Бінарний файл, скомпільований як PIE, або Position Independent Executable, означає, що програма може завантажуватися в різних місцях пам'яті щоразу, коли вона виконується, запобігаючи жорстко закодованим адресам.

Трюк для експлуатації цих бінарних файлів полягає в експлуатації відносних адрес — зміщення між частинами програми залишаються незмінними, навіть якщо абсолютні місця змінюються. Щоб обійти PIE, вам потрібно лише витікати одну адресу, зазвичай з стека, використовуючи вразливості, такі як атаки форматних рядків. Як тільки у вас є адреса, ви можете обчислити інші за їхніми фіксованими зміщеннями.

Корисна підказка при експлуатації бінарних файлів PIE полягає в тому, що їх базова адреса зазвичай закінчується на 000 через те, що сторінки пам'яті є одиницями рандомізації, розміром 0x1000 байт. Це вирівнювання може бути критичною перевіркою, якщо експлуатація не працює так, як очікувалося, вказуючи на те, чи була ідентифікована правильна базова адреса.
Або ви можете використовувати це для вашої експлуатації, якщо ви витікаєте, що адреса знаходиться за 0x649e1024, ви знаєте, що базова адреса 0x649e1000 і з цього ви можете просто обчислити зміщення функцій і місць.

Обходи

Щоб обійти PIE, потрібно витикувати якусь адресу завантаженого бінарного файлу, для цього є кілька варіантів:

  • Вимкнений ASLR: Якщо ASLR вимкнено, бінарний файл, скомпільований з PIE, завжди буде завантажуватися за тією ж адресою, отже, PIE буде марним, оскільки адреси об'єктів завжди будуть в одному і тому ж місці.
  • Отримати витік (поширено в простих CTF завданнях, перевірте цей приклад)
  • Брутфорсити значення EBP та EIP у стеці, поки не витечете правильні:

BF Addresses in the Stack

  • Використовуйте вразливість произвольного читання, таку як форматний рядок, щоб витікати адресу бінарного файлу (наприклад, зі стека, як у попередній техніці), щоб отримати базу бінарного файлу та використовувати зміщення звідти. Знайдіть приклад тут.

Посилання

tip

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

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