Fast Bin Attack
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Для отримання додаткової інформації про те, що таке fast bin, перегляньте цю сторінку:
Bins & Memory AllocationsОскільки fast bin є односпрямованим зв'язним списком, захистів тут значно менше, ніж в інших bins, і просто модифікація адреси у звільненому fast bin chunk достатня, щоб пізніше виділити chunk за будь-якою адресою пам'яті.
У підсумку:
Ви можете знайти повний приклад у дуже добре поясненому коді з 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
.
Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)