5.1 KiB
Büyük Bin Saldırısı
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuzu
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Temel Bilgiler
Büyük bir binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın:
{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}
Bir örnek bulmak mümkündür how2heap - büyük bin saldırısı.
Temelde burada, en son "güncel" glibc sürümünde (2.35), P->bk_nextsize
kontrol edilmediği görülebilir, belirli koşullar sağlandığında büyük bir bin parçasının değeriyle bir adresin değiştirilebileceği.
Bu örnekte aşağıdaki koşulları bulabilirsiniz:
- Büyük bir parça tahsis edilir
- İlk parçadan daha küçük ancak aynı dizindeki başka bir büyük parça tahsis edilir
- Binde ilk sıraya gitmesi gerektiği için daha küçük olmalıdır
- (Üst parçayla birleşmeyi önlemek için bir parça oluşturulur)
- Ardından, ilk büyük parça serbest bırakılır ve ondan daha büyük yeni bir parça tahsis edilir -> Parça1 büyük bine gider
- Ardından, ikinci büyük parça serbest bırakılır
- Şimdi, zafiyet: Saldırgan,
chunk1->bk_nextsize
'ı[hedef-0x20]
olarak değiştirebilir - Daha sonra, 2. parçadan daha büyük bir parça tahsis edilir, bu nedenle parça2, adresi
chunk1->bk_nextsize->fd_nextsize
'ı parça2'nin adresiyle üzerine yazarak büyük bine eklenir
{% hint style="success" %}
Diğer potansiyel senaryolar da vardır, önemli olan, büyük bir bine, bir mevcut X parçadan daha küçük bir parça eklemektir, bu nedenle bine sadece ondan önce eklenmesi gerekmektedir ve X'in bk_nextsize
'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresinin yazılacağı yer burasıdır.
{% endhint %}
Bu, malloc'tan ilgili kod parçacığıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir:
{% code overflow="wrap" %}
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
{% endcode %}
Bu, daha büyük parçalarla hızlı bir kova saldırısını sömürmek için libc'in global_max_fast
global değişkenini üzerine yazmak için kullanılabilir.
Bu saldırının başka harika bir açıklamasını guyinatuxedo adresinde bulabilirsiniz.
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'da takip edin.**
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.