WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
AWS Hacking'ı öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'ı öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Resmi GNU sitesine göre __malloc_hook
değişkeni, malloc()
çağrıldığında libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir. Bu nedenle, bu adres örneğin bir One Gadget ile üzerine yazılırsa ve malloc
çağrılırsa, One Gadget çağrılacaktır.
Malloc'ı çağırmak için programın onu çağırmasını beklemek veya printf("%10000$c")
çağrısını yaparak libc
'in bunları yığında ayırmak için malloc çağırmasını sağlamak mümkündür.
One Gadget hakkında daha fazla bilgi için:
One GadgetKancaların GLIBC >= 2.34 için devre dışı bırakıldığını unutmayın. Modern GLIBC sürümlerinde kullanılabilecek diğer teknikler bulunmaktadır. Bakınız: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Bu, bir hızlı bin saldırısını kötüye kullanarak bir sıralanmamış bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanılmıştır:
Unsorted Bin AttackEğer ikili dosyada semboller varsa, aşağıdaki komutla __free_hook
adresini bulmak mümkündür:
Post'ta semboller olmadan free hook'un adresini nasıl bulacağınıza dair adım adım bir kılavuz bulabilirsiniz. Özet olarak, free fonksiyonunda:
Önceki kodun belirttiği kırılma noktasında $eax
içinde free hook'un adresi bulunacaktır.
Şimdi bir hızlı bin saldırısı gerçekleştiriliyor:
İlk olarak, __free_hook
konumunda 200 boyutunda hızlı parçalarla çalışmanın mümkün olduğu keşfedilir:
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
Bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır.
Bunun için, boyutu 0xfc
olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçanın boyutu 0xfc*2 = 0x1f8
olan bir parçanın işaretçisine ulaşılır.
Ardından, bu parçada edit fonksiyonu çağrılır ve bu hızlı parçanın fd
adresi önceki __free_hook
fonksiyonuna işaret etmek üzere değiştirilir.
Daha sonra, hızlı bir parçanın önceki gereksiz parçasını almak için boyutu 0x1f8
olan bir parça oluşturulur, böylece __free_hook
'a hızlı bir parça parçası almak için boyutu 0x1f8
olan başka bir parça oluşturulur ve bu parça system
fonksiyonunun adresiyle üzerine yazılır.
Ve son olarak, /bin/sh\x00
dizesini içeren bir parça silme fonksiyonunu çağırarak serbest bırakılır, __free_hook
fonksiyonunu tetikler ve parametre olarak /bin/sh\x00
ile system'e işaret eder.
AWS Hacking öğrenin ve uygulayın:HackTricks Eğitim AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve uygulayın: HackTricks Eğitim GCP Red Team Expert (GRTE)