House of Einherjar
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)
Check the example from https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
Or the one from https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (you might need to fill the tcache)
Мета полягає в тому, щоб виділити пам'ять за майже будь-якою конкретною адресою.
Створити фейковий шматок, коли ми хочемо виділити шматок:
Встановити вказівники, щоб вони вказували на себе, щоб обійти перевірки на коректність
Переповнення на один байт з нульовим байтом з одного шматка до наступного, щоб змінити прапор PREV_INUSE
.
Вказати в prev_size
зловживаного шматка, що відрізняється від самого себе та фейкового шматка
Розмір фейкового шматка також повинен бути встановлений таким же, щоб обійти перевірки на коректність
Для побудови цих шматків вам знадобиться витік з купи.
A
фейковий шматок створюється всередині шматка, контрольованого атакуючим, вказуючи fd
та bk
на оригінальний шматок, щоб обійти захист
Виділяються ще 2 шматки (B
та C
)
Зловживаючи переповненням на один в 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, і другий з них буде виділяти цільову адресу
Після звільнення вказівники не обнуляються, тому все ще можливо отримати доступ до їх даних. Тому шматок розміщується в неупорядкованому біні та витікає вказівники, які він містить (libc leak), а потім нова купа розміщується в неупорядкованому біні та витікає адресу купи з отриманого вказівника.
Помилка переповнення нульовим байтом у strtok
.
Використовуйте House of Einherjar, щоб отримати ситуацію з перекриваючими шматками та закінчити з отруєнням Tcache, щоб отримати примітив довільного запису.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)