Large Bin Attack
Reading time: 3 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
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Temel Bilgiler
Büyük bin nedir hakkında daha fazla bilgi için bu sayfayı kontrol edin:
how2heap - large bin attack içinde harika bir örnek bulmak mümkündür.
Temelde burada, glibc'nin en son "güncel" sürümünde (2.35) kontrol edilmediğini görebilirsiniz: P->bk_nextsize
, belirli koşullar sağlandığında büyük bir bin parçasının değeri ile rastgele bir adresi değiştirmeye olanak tanır.
Bu örnekte aşağıdaki koşulları bulabilirsiniz:
- Büyük bir parça tahsis edilir
- İlkinden daha küçük ama aynı indekste bir büyük parça tahsis edilir
- Bin içinde ilk gitmesi gerektiği için daha küçük olmalıdır
- (Üst parçayla birleştirmeyi ö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 -> Chunk1 büyük bin'e gider
- Sonra, ikinci büyük parça serbest bırakılır
- Şimdi, zafiyet: Saldırgan
chunk1->bk_nextsize
'ı[target-0x20]
olarak değiştirebilir - Ardından, chunk 2'den daha büyük bir parça tahsis edilir, böylece chunk2 büyük bin'e eklenir ve
chunk1->bk_nextsize->fd_nextsize
adresini chunk2'nin adresi ile üzerine yazar
tip
Diğer potansiyel senaryolar vardır, mesele büyük bin'e mevcut bir X parçasından daha küçük bir parça eklemektir, böylece bin içinde onun hemen öncesine yerleştirilmesi gerekir ve X'in bk_nextsize
'ını değiştirebilmemiz gerekir çünkü daha küçük parçanın adresi buraya yazılacaktır.
Bu malloc'tan ilgili kod. 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, libc'nin global_max_fast
global değişkenini geçersiz kılmak için kullanılabilir, böylece daha büyük parçalarla hızlı bin saldırısını istismar edebilirsiniz.
Bu saldırının başka bir harika açıklamasını guyinatuxedo adresinde bulabilirsiniz.
Diğer örnekler
- La casa de papel. HackOn CTF 2024
- how2heap adresinde göründüğü gibi aynı durumda büyük bin saldırısı.
- Yazma primi daha karmaşıktır, çünkü
global_max_fast
burada işe yaramaz. - İstismarı tamamlamak için FSOP gereklidir.
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
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.