Tcache 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)
Для отримання додаткової інформації про те, що таке Tcache bin, перегляньте цю сторінку:
Bins & Memory AllocationsПерш за все, зверніть увагу, що Tcache був введений у версії Glibc 2.26.
Tcache attack (також відомий як Tcache poisoning), запропонований на guyinatuxido page, дуже схожий на fast bin attack, де мета полягає в переписуванні вказівника на наступний chunk у bin всередині звільненого chunk на довільну адресу, щоб пізніше було можливим виділити цю конкретну адресу і потенційно переписати вказівники.
Однак, в даний час, якщо ви запустите зазначений код, ви отримаєте помилку: malloc(): unaligned tcache chunk detected
. Тому потрібно записати як адресу в новому вказівнику вирівняну адресу (або виконати бінарний файл достатню кількість разів, щоб записана адреса насправді була вирівняна).
Зазвичай на початку купи можна знайти chunk, що містить кількість chunk'ів на індекс всередині tcache та адресу головного chunk'у кожного індексу tcache. Якщо з якоїсь причини можливо змінити цю інформацію, буде можливим зробити так, щоб головний chunk деякого індексу вказував на бажану адресу (таку як __malloc_hook
), щоб потім виділити chunk розміру індексу та переписати вміст __malloc_hook
у цьому випадку.
Libc info leak: Можна заповнити tcaches, додати chunk у несортований список, очистити tcache та перевиділити chunk з несортованого bin, переписуючи лише перші 8B, залишаючи другу адресу до libc з chunk'у недоторканою, щоб ми могли її прочитати.
Tcache attack: Бінарний файл вразливий до 1B heap overflow. Це буде зловживанням для зміни заголовка розміру виділеного chunk'у, роблячи його більшим. Потім цей chunk буде звільнений, додаючи його до tcache chunk'ів фальшивого розміру. Потім ми виділимо chunk з фальшивим розміром, і попередній chunk буде повернуто, знаючи, що цей chunk насправді був меншим, і це відкриває можливість переписати наступний chunk в пам'яті.
Ми зловживаємо цим, щоб переписати вказівник FD наступного chunk'у, щоб вказувати на malloc_hook
, так що потім можливо виділити 2 вказівники: спочатку легітимний вказівник, який ми щойно змінили, а потім друге виділення поверне chunk у malloc_hook
, який можна зловживати для запису one gadget.
Libc info leak: Є використання після звільнення та подвійне звільнення. У цьому звіті автор злив адресу libc, читаючи адресу chunk'у, розміщеного в малому bin (як зливати його з несортованого bin, але з малого).
Tcache attack: Tcache виконується через подвійне звільнення. Один і той же chunk звільняється двічі, тому всередині Tcache chunk вказуватиме на себе. Потім він виділяється, його вказівник FD змінюється, щоб вказувати на free hook, а потім він знову виділяється, тому наступний chunk у списку буде в free hook. Потім це також виділяється, і можливо записати адресу system
тут, тому, коли malloc, що містить "/bin/sh"
, буде звільнено, ми отримаємо shell.
Основна вразливість тут полягає в можливості free
будь-якої адреси в купі, вказуючи її зсув.
Tcache indexes attack: Можливо виділити та звільнити chunk розміру, який, коли зберігається всередині tcache chunk (chunk з інформацією про tcache bins), генеруватиме адресу зі значенням 0x100. Це тому, що tcache зберігає кількість chunk'ів у кожному bin в різних байтах, отже, один chunk в одному конкретному індексі генерує значення 0x100.
Потім це значення виглядає так, ніби є chunk розміру 0x100. Дозволяючи зловживати цим, звільняючи цю адресу. Це додасть цю адресу до індексу chunk'ів розміру 0x100 у tcache.
Потім, виділяючи chunk розміру 0x100, попередня адреса буде повернута як chunk, що дозволяє переписати інші індекси tcache. Наприклад, помістивши адресу malloc hook в один з них і виділивши chunk розміру цього індексу, ми отримаємо chunk у calloc hook, що дозволяє записати one gadget для отримання shell.
Така ж вразливість, як і раніше, з одним додатковим обмеженням.
Tcache indexes attack: Схожий напад на попередній, але з меншим числом кроків, звільняючи chunk, що містить інформацію про tcache, так що його адреса додається до індексу tcache свого розміру, тому можливо виділити цей розмір і отримати інформацію про tcache chunk як chunk, що дозволяє додати free hook як адресу одного індексу, виділити його та записати one gadget на ньому.
Write After Free для додавання числа до вказівника fd
.
Багато heap feng-shui потрібно в цьому завданні. Звіт показує, як контроль голови Tcache free-list є досить зручним.
Glibc leak через stdout
(FSOP).
Tcache poisoning для отримання довільного запису.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)