WWW2Exec - __malloc_hook & __free_hook
Reading time: 4 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.
Malloc Hook
Resmi GNU sitesinde belirtildiği gibi, __malloc_hook
değişkeni, malloc()
çağrıldığında çağrılacak bir fonksiyonun adresine işaret eden bir işaretçidir ve bu adres libc kütüphanesinin veri bölümünde saklanır. Bu nedenle, bu adres bir One Gadget ile üzerine yazılırsa ve malloc
çağrılırsa, One Gadget çağrılacaktır.
Malloc'u çağırmak için programın bunu çağırmasını beklemek veya printf("%10000$c")
çağrısı yaparak, libc
'nin bunları yığın üzerinde tahsis etmesini sağlamak mümkündür.
One Gadget hakkında daha fazla bilgi için:
warning
Hooks'un GLIBC >= 2.34 için devre dışı olduğunu unutmayın. Modern GLIBC sürümlerinde kullanılabilecek diğer teknikler vardır. Bakınız: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Free Hook
Bu, sıralanmamış bir kutu saldırısından sonra hızlı bir kutu saldırısını kötüye kullanan sayfadaki örneklerden birinde kötüye kullanıldı:
Binariesinin sembolleri varsa __free_hook
adresini bulmak mümkündür:
gef➤ p &__free_hook
Postta semboller olmadan serbest kancanın adresini nasıl bulacağınıza dair adım adım bir kılavuz bulabilirsiniz. Özetle, serbest fonksiyonda:
gef➤ x/20i free
0xf75dedc0 : push ebx
0xf75dedc1 : call 0xf768f625
0xf75dedc6 : add ebx,0x14323a
0xf75dedcc : sub esp,0x8
0xf75dedcf : mov eax,DWORD PTR [ebx-0x98]
0xf75dedd5 : mov ecx,DWORD PTR [esp+0x10]
0xf75dedd9 : mov eax,DWORD PTR [eax]--- BURADA KIRIL
0xf75deddb : test eax,eax ;<
0xf75deddd : jne 0xf75dee50
Yukarıdaki kodda belirtilen kırılma noktasında $eax
içinde serbest kancanın adresi bulunacaktır.
Şimdi bir fast bin saldırısı gerçekleştirilir:
- Öncelikle,
__free_hook
konumunda 200 boyutunda hızlı parçalar ile çalışmanın mümkün olduğu keşfedilir: gef➤ p &__free_hook
$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
- Eğer bu konumda 0x200 boyutunda bir hızlı parça elde edebilirsek, çalıştırılacak bir fonksiyon işaretçisini yazmak mümkün olacaktır.
- Bunun için,
0xfc
boyutunda yeni bir parça oluşturulur ve birleştirilmiş fonksiyon bu işaretçi ile iki kez çağrılır, bu şekilde hızlı parçadaki0xfc*2 = 0x1f8
boyutunda serbest bir parçaya işaret eden bir işaretçi elde ederiz. - Ardından, bu parçadaki düzenleme fonksiyonu çağrılır ve bu hızlı parçanın
fd
adresi önceki__free_hook
fonksiyonuna işaret edecek şekilde değiştirilir. - Sonra, hızlı parçadan önceki işe yaramaz parçayı almak için
0x1f8
boyutunda bir parça oluşturulur, böylece__free_hook
içinde bir hızlı parça elde etmek için0x1f8
boyutunda başka bir parça oluşturulur ve bu parçasystem
fonksiyonunun adresi ile üzerine yazılır. - Ve nihayet,
/bin/sh\x00
dizesini içeren bir parça silme fonksiyonu çağrılarak serbest bırakılır, bu da__free_hook
fonksiyonunu tetikler ve/bin/sh\x00
parametre olarak sistem fonksiyonuna işaret eder.
Referanslar
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
- https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
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.