House of Einherjar
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Basic Information
Code
- Перевірте приклад з https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Або той, що з https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (можливо, вам потрібно буде заповнити tcache)
Goal
- Мета полягає в тому, щоб виділити пам'ять за майже будь-якою конкретною адресою.
Requirements
- Створити фейковий чанк, коли ми хочемо виділити чанк:
- Встановити вказівники, щоб вони вказували на себе, щоб обійти перевірки
- Переповнення на один байт з нульовим байтом з одного чанка до наступного, щоб змінити прапорець
PREV_INUSE
. - Вказати в
prev_size
зловживаного чанка off-by-null різницю між ним і фейковим чанком - Розмір фейкового чанка також повинен бути встановлений таким же, щоб обійти перевірки
- Для побудови цих чанків вам знадобиться витік купи.
Attack
A
фейковий чанк створюється всередині чанка, контрольованого атакуючим, вказуючиfd
іbk
на оригінальний чанк, щоб обійти захист- Виділяються 2 інші чанки (
B
іC
) - Зловживаючи off by one в
B
, очищається бітprev in use
, а даніprev_size
перезаписуються різницею між місцем, де виділяється чанкC
, і фейковим чанкомA
, створеним раніше - Цей
prev_size
і розмір у фейковому чанкуA
повинні бути однаковими, щоб обійти перевірки. - Потім заповнюється tcache
- Потім
C
звільняється, щоб об'єднатися з фейковим чанкомA
- Потім створюється новий чанк
D
, який почнеться у фейковому чанкуA
і покриє чанкB
- Будинок Ейнхер'я закінчується тут
- Це можна продовжити з атакою швидкого біну або отруєнням Tcache:
- Звільнити
B
, щоб додати його до швидкого біну / Tcache fd
B
перезаписується, змушуючи його вказувати на цільову адресу, зловживаючи чанкомD
(оскільки він міститьB
всередині)- Потім виконуються 2 malloc, і другий з них буде виділяти цільову адресу
References and other examples
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Після звільнення вказівники не обнуляються, тому все ще можливо отримати доступ до їх даних. Тому чанк поміщається в неупорядкований бін і витікає вказівники, які він містить (libc leak), а потім нова купа поміщається в неупорядкований бін і витікає адресу купи з вказівника, який вона отримує.
- baby-talk. DiceCTF 2024
- Помилка переповнення нульового байта в
strtok
. - Використовуйте House of Einherjar, щоб отримати ситуацію з перекриваючими чанками і закінчити з отруєнням Tcache, щоб отримати примітив довільного запису.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.