House of Einherjar

Підтримайте HackTricks

Основна інформація

Код

Мета

  • Мета - виділити пам'ять практично за будь-якою конкретною адресою.

Вимоги

  • Створіть фальшивий чанк, коли ми хочемо виділити чанк:

  • Встановіть вказівники, щоб вони вказували на себе, щоб обійти перевірки належності

  • Переливання одного байта з нульовим байтом з одного чанку в наступний для зміни прапора PREV_INUSE.

  • Вкажіть у prev_size зловживаного чанку off-by-null різницю між ним самим та фальшивим чанком

  • Розмір фальшивого чанку також повинен бути встановлений таким же розміром для обходу перевірок належності

  • Для створення цих чанків вам знадобиться витік купи.

Атака

  • Створюється фальшивий чанк всередині чанку, керованого зловмисником, що вказує з 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

  • Будинок Einherjar закінчується тут

  • Це можна продовжити атакою на швидкий бін або забрудненням Tcache:

  • Вивільніть B, щоб додати його до швидкого біну / Tcache

  • fd B перезаписується так, щоб він вказував на цільову адресу, зловживаючи чанком D (оскільки він містить B всередині)

  • Потім робляться 2 malloc, і другий буде виділяти цільову адресу

Посилання та інші приклади

  • Після вивільнення вказівники не нулюються, тому все ще можливий доступ до їх даних. Тому чанк розміщується в неупорядкованому блоці та витікають вказівники, які він містить (витік libc), а потім на неупорядкованому блоці розміщується нова купа та витікається адреса купи з вказівника, який вона отримує.

  • Помилка переливання нуль-байту в strtok.

  • Використовуйте House of Einherjar, щоб отримати ситуацію перекривання чанків та завершіть забрудненням Tcache, щоб отримати примітив для довільного запису.

Підтримайте HackTricks

Last updated