Fast Bin Attack
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Для отримання додаткової інформації про те, що таке швидкий бін, перегляньте цю сторінку:
Bins & Memory AllocationsОскільки швидкий бін є однозв'язним списком, тут набагато менше захисту, ніж в інших бінах, і достатньо просто змінити адресу в вивільненому швидкому блоці, щоб мати можливість виділити пізніше блоці в будь-якій адресі пам'яті.
У підсумку:
Ви можете знайти повний приклад у дуже добре поясненому коді за посиланням https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Якщо можливо перезаписати значення глобальної змінної global_max_fast
на велике число, це дозволяє створювати швидкі бін-частини більших розмірів, що потенційно дозволяє виконувати атаки на швидкі бін-частини в сценаріях, де це раніше було неможливо. Ця ситуація корисна в контексті атаки на великі бін-частини та атаки на несортовані бін-частини
Можливо виділити частини, звільнити їх, прочитати їх вміст та заповнити їх (з вразливістю переповнення).
Консолідувати частину для витоку інформації: Техніка полягає в тому, щоб зловживати переповненням, щоб створити фальшивий prev_size
, таким чином, одну попередню частину поміщають всередину більшої, тому при виділенні більшої частини, що містить іншу частину, можливо роздрукувати її дані та витік адреси до libc (main_arena+88
).
Перезаписати гачок malloc: Для цього, зловживаючи попередньою ситуацією перекриття, було можливо мати 2 частини, які вказували на одну й ту ж пам'ять. Тому, звільнивши їх обидві (звільнивши ще одну частину між ними, щоб уникнути захисту), було можливо мати ту саму частину в швидкій бін 2 рази. Потім було можливо виділити її знову, перезаписати адресу наступної частини, щоб вказувати трохи перед __malloc_hook
(таким чином, вона вказує на ціле число, яке malloc вважає вільним розміром - ще одне ухилення), виділити її знову, а потім виділити ще одну частину, яка отримає адресу гачків malloc.
Нарешті, туди було записано один гаджет.
Є переповнення купи та використання після вивільнення, а також подвійне вивільнення, оскільки після вивільнення частини можна повторно використовувати та знову вивільняти вказівники.
Витік інформації про libc: Просто вивільніть деякі частини, і вони отримають вказівник на частину головної арени. Оскільки можна повторно використовувати вивільнені вказівники, просто прочитайте цю адресу.
Атака на швидкі бін-частини: Усі вказівники на виділення зберігаються всередині масиву, тому ми можемо вивільнити кілька швидких бін-частин, а в останній перезаписати адресу, щоб вказувати трохи перед цим масивом вказівників. Потім виділити кілька частин однакового розміру, і ми отримаємо спочатку легітимний, а потім фальшивий, що містить масив вказівників. Тепер ми можемо перезаписати ці вказівники виділення, щоб зробити адресу GOT free
вказувати на system
, а потім записати "/bin/sh"
в частину 1, а потім викликати free(chunk1)
, який замість цього виконає system("/bin/sh")
.
Ще один приклад зловживання переповненням на один байт для консолідації частин в несортованому біні та отримання витоку інформації про libc, а потім виконання атаки на швидкі бін-частини для перезапису гачка malloc адресою одного гаджета
Після витоку інформації, зловживаючи несортованим біном з UAF для витоку адреси libc та адреси PIE, експлойт цього CTF використовував атаку на швидкі бін-частини для виділення частини в місці, де знаходилися вказівники на керовані частини, тому було можливо перезаписати певні вказівники, щоб записати один гаджет в GOT
Ви можете знайти атаку на швидкі бін-частини, яку використовували через атаку на несортовані бін-частини:
Зауважте, що перед виконанням атак на швидкі бін-частини досить поширено зловживати списками вивільнення для витоку адрес libc/кучі (якщо потрібно).
Можливо виділити частини розміром більше 0x100
.
Перезаписати global_max_fast
, використовуючи атаку на несортований бін (працює 1/16 разів через ASLR, оскільки нам потрібно змінити 12 бітів, але ми повинні змінити 16 бітів).
Атака на швидкі бін-частини для зміни глобального масиву частин. Це надає примітив читання/запису за власним бажанням, що дозволяє змінювати GOT та встановлювати деякі функції, щоб вказувати на system
.
Вивчайте та практикуйте взлом AWS:Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)