5.5 KiB
Büyük Bin Saldırısı
{% 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.
Temel Bilgiler
Bir büyük 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 %}
how2heap - büyük bin saldırısı sayfasında harika bir örnek bulunabilir.
Temelde burada, en son "güncel" glibc sürümünde (2.35), P->bk_nextsize
kontrol edilmediği için belirli koşullar sağlandığında büyük bir bin parçasının değeri ile bir adresin değiştirilebileceğini görebilirsiniz.
Bu örnekte aşağıdaki koşulları bulabilirsiniz:
- Bir büyük parça tahsis edilir
- İlk parçadan daha küçük ancak aynı dizindeki 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 - Ardından, chunk 2'den daha büyük bir parça tahsis edilir, bu nedenle chunk2, adresi
chunk1->bk_nextsize->fd_nextsize
'ı chunk2'nin adresi ile üzerine yazarak büyük bine eklenir
{% hint style="success" %}
Diğer potansiyel senaryolar bulunmaktadır, önemli olan, büyük bine, bir mevcut X parçadan daha küçük bir parça eklemektir, bu nedenle binde X'ten hemen önce eklenmesi gerekmekte 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çaları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ı bin 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.
Diğer örnekler
- La casa de papel. HackOn CTF 2024
- Aynı durumda büyük bin saldırısı how2heap adresinde göründüğü gibi.
- Yazma ilkesi daha karmaşıktır, çünkü burada
global_max_fast
işe yaramaz. - Sömürüyü bitirmek için FSOP gereklidir.
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitimi AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitimi GCP Red Team Expert (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.