Large Bin Attack

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

Temel Bilgiler

Bir büyük binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın:

Bins & Memory Allocations

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

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.

Bu, malloc'tan ilgili kod parçalarıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir:

/* 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
}

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

  • 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.

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

Last updated