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

Basic Information

Code

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