Fast Bin Attack
Temel Bilgiler
Hızlı bin nedir hakkında daha fazla bilgi için bu sayfayı kontrol edin:
Bins & Memory AllocationsHızlı bin, tek yönlü bağlı liste olduğundan diğer tipteki depolama alanlarına göre çok daha az korumaya sahiptir ve sadece bir serbest bırakılmış hızlı bin parçasındaki bir adresi değiştirmek, daha sonra herhangi bir bellek adresinde bir parça tahsis etmenin mümkün olmasını sağlar.
Özetle:
Çok iyi açıklanmış bir kodda tam bir örnek bulabilirsiniz: https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Eğer global değişken global_max_fast
'in değeri büyük bir sayıyla üzerine yazılabilirse, bu daha büyük boyutlarda hızlı bin parçaları oluşturmayı mümkün kılar, bu da önceden mümkün olmayan senaryolarda hızlı bin saldırıları gerçekleştirmeye olanak tanır. Bu durum büyük bin saldırısı ve sıralanmamış bin saldırısı bağlamında kullanışlıdır.
Örnekler
Parçalar tahsis edilebilir, serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile).
Bilgi sızdırma için parçayı birleştir: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir
prev_size
oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu nedenle başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc (main_arena+88
) adresini sızdırmak mümkün olur.Malloc hook üzerine yazma: Bunun için ve önceki üst üste gelme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak) aynı parçayı hızlı binde 2 kez elde etmek mümkündü. Sonra, tekrar tahsis edilebilir, bir sonraki parçanın adresini
__malloc_hook
'un biraz öncesine işaret edecek şekilde üzerine yazmak (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmek ve ardından malloc hook adreslerini alacak başka bir parça tahsis etmek mümkün olur. Sonunda bir tek araç oraya yazılmış olur.Bir parça serbest bırakıldığında, aşırı kullanım ve çift serbest bırakma olasılığı vardır çünkü serbest bırakılan bir parçayı yeniden kullanmak ve yeniden serbest bırakmak mümkündür.
Libc bilgi sızıntısı: Sadece bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri yeniden kullanabileceğinizden, bu adresi okuyun.
Hızlı bin saldırısı: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini üzerine yazarak
free
'nin GOT adresinisystem
'e işaret etmesini sağlayabiliriz ve ardından chunk 1'e"/bin/sh"
yazarakfree(chunk1)
çağrısı yapabiliriz ki bu da aslındasystem("/bin/sh")
'i çalıştıracaktır.Sıralanmamış parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek için bir bayt taşmasını kötüye kullanma örneği ve ardından malloc hook'u bir tek araç adresiyle üzerine yazmak için hızlı bin saldırısını gerçekleştirmek için bir örnek
Bir libc adresi ve bir PIE adresi sızdırmak için sıralanmamış parçaları kötüye kullanma ve UAF ile bilgi sızdırmak için bir bilgi sızıntısı sonrası, bu CTF'nin sömürüsü, kontrol edilen parçaların bulunduğu yere bir parça tahsis etmek için hızlı bin saldırısını kullandı, böylece belirli işaretçileri üzerine yazarak GOT'ta bir tek araç yazmak mümkün oldu
Bir hızlı bin saldırısının sıralanmamış bir parça saldırısı aracılığıyla kötüye kullanıldığı bir örneği bulabilirsiniz:
Hızlı bin saldırıları gerçekleştirmeden önce genellikle libc/heap adreslerini sızdırmak için serbest listeleri kötüye kullanmanın yaygın olduğunu unutmayın (gerektiğinde).
Yalnızca
0x100
'den büyük boyutta parçalar tahsis edebiliriz.Bir Sıralanmamış Bin saldırısı kullanarak
global_max_fast
'ı üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerektiği için, ancak 16 biti değiştirmemiz gerekmektedir).Global bir parça dizisini değiştirmek için Hızlı Bin saldırısı. Bu, GOT'u değiştirmeye ve bazı işlevleri
system
'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar.
Last updated