mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
4.7 KiB
4.7 KiB
House of Einherjar
{{#include ../../banners/hacktricks-training.md}}
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 fdBперезаписується, змушуючи його вказувати на цільову адресу, зловживаючи чанком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, щоб отримати примітив довільного запису.
{{#include ../../banners/hacktricks-training.md}}