House of Einherjar
Основна інформація
Код
Або з https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (можливо, потрібно заповнити tcache)
Мета
Мета - виділити пам'ять практично за будь-якою конкретною адресою.
Вимоги
Створіть фальшивий чанк, коли ми хочемо виділити чанк:
Встановіть вказівники, щоб вони вказували на себе, щоб обійти перевірки належності
Переливання одного байта з нульовим байтом з одного чанку в наступний для зміни прапора
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
, щоб додати його до швидкого біну / Tcachefd
B
перезаписується так, щоб він вказував на цільову адресу, зловживаючи чанкомD
(оскільки він міститьB
всередині)Потім робляться 2 malloc, і другий буде виділяти цільову адресу
Посилання та інші приклади
Після вивільнення вказівники не нулюються, тому все ще можливий доступ до їх даних. Тому чанк розміщується в неупорядкованому блоці та витікають вказівники, які він містить (витік libc), а потім на неупорядкованому блоці розміщується нова купа та витікається адреса купи з вказівника, який вона отримує.
Помилка переливання нуль-байту в
strtok
.Використовуйте House of Einherjar, щоб отримати ситуацію перекривання чанків та завершіть забрудненням Tcache, щоб отримати примітив для довільного запису.
Last updated