WWW2Exec - GOT/PLT

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

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

GOT: Глобальна таблиця зміщень

Глобальна таблиця зміщень (GOT) - це механізм, який використовується в динамічно зв'язаних бінарних файлах для управління адресами зовнішніх функцій. Оскільки ці адреси не відомі до часу виконання (через динамічне зв'язування), GOT надає можливість динамічно оновлювати адреси цих зовнішніх символів після їх вирішення.

Кожен запис в GOT відповідає символу в зовнішніх бібліотеках, які може викликати бінарний файл. Коли функцію вперше викликають, її фактична адреса вирішується динамічним зв'язувальником і зберігається в GOT. Подальші виклики цієї функції використовують адресу, збережену в GOT, уникнувши таким чином накладних витрат на вирішення адреси знову.

PLT: Таблиця зв'язку процедур

Таблиця зв'язку процедур (PLT) тісно взаємодіє з GOT і служить трампліном для обробки викликів зовнішніх функцій. Коли бінарний файл викликає зовнішню функцію вперше, управління передається до запису в PLT, пов'язаному з цією функцією. Цей запис PLT відповідає за виклик динамічного зв'язувальника для вирішення адреси функції, якщо вона ще не була вирішена. Після вирішення адреса зберігається в GOT.

Отже, записи GOT використовуються безпосередньо після вирішення адреси зовнішньої функції або змінної. Записи PLT використовуються для полегшення початкового вирішення цих адрес за допомогою динамічного зв'язувальника.

Отримання виконання

Перевірка GOT

Отримайте адресу таблиці GOT за допомогою: objdump -s -j .got ./exec

Після завантаження виконуваного файлу в GEF ви можете побачити функції, які знаходяться в GOT: gef➤ x/20x 0xADDR_GOT

За допомогою GEF ви можете розпочати сесію налагодження та виконати got, щоб побачити таблицю got:

GOT2Exec

У бінарному файлі GOT містить адреси функцій або секції PLT, які завантажать адресу функції. Мета цього довільного запису полягає в тому, щоб переписати запис GOT функції, яка буде виконана пізніше, з адресою PLT функції system, наприклад.

Ідеально, ви перепишете GOT функції, яка буде викликана з параметрами, які контролюються вами (таким чином, ви зможете контролювати параметри, які надсилаються функції системи).

Якщо system не використовується бінарним файлом, функція системи не матиме запису в PLT. У цьому сценарії вам доведеться спочатку витікти адресу функції system, а потім переписати GOT, щоб вказати на цю адресу.

Ви можете побачити адреси PLT за допомогою objdump -j .plt -d ./vuln_binary

Записи GOT бібліотеки libc

GOT бібліотеки libc зазвичай компілюється з частковим RELRO, що робить його гарною метою для цього, якщо можливо визначити його адресу (ASLR).

Звичайні функції libc будуть викликати інші внутрішні функції, адреси GOT яких можна переписати для отримання виконання коду.

Знайдіть більше інформації про цю техніку тут.

Free2system

У CTF з експлуатації купиць часто можна контролювати вміст частин і, в певний момент, навіть переписати таблицю GOT. Простий трюк для отримання RCE, якщо немає доступних гаджетів, - переписати адресу free GOT, щоб вказувати на system та записати у частину "/bin/sh". Таким чином, коли ця частина буде вивільнена, вона виконає system("/bin/sh").

Strlen2system

Ще одна поширена техніка - переписати адресу GOT strlen, щоб вказувати на system, тому якщо цю функцію викликають з введеними користувачем даними, можна передати рядок "/bin/sh" та отримати оболонку.

Більше того, якщо puts використовується з введеними користувачем даними, можна переписати адресу GOT strlen, щоб вказувати на system та передати рядок "/bin/sh" для отримання оболонки, оскільки puts викличе strlen з введеними користувачем даними.

One Gadget

One Gadget

Зловживання GOT з купиці

Звичайний спосіб отримання RCE з вразливості купиці - зловживання швидкої купиці, щоб можна було додати частину таблиці GOT до швидкої купиці, тому коли цей шматок виділяється, буде можливо переписати вказівник функції, зазвичай free. Потім, вказавши free на system та вивільнивши шматок, де було записано /bin/sh\x00, буде виконано оболонку.

Можливо знайти приклад тут.

Захисти

Захист Full RELRO призначений для захисту від цього виду техніки шляхом вирішення всіх адрес функцій при запуску бінарного файлу та зроблення таблиці GOT доступною тільки для читання після цього:

Relro

References

Last updated