Tcache Bin Attack
Reading time: 5 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
Tcache bin nedir hakkında daha fazla bilgi için bu sayfayı kontrol edin:
Öncelikle, Tcache'in Glibc sürüm 2.26'da tanıtıldığını unutmayın.
Tcache saldırısı (aynı zamanda Tcache zehirlenmesi olarak da bilinir) guyinatuxido sayfasında önerilen, bir hızlı bin saldırısına çok benzer; burada amaç, serbest bırakılmış bir parçadaki bin içindeki bir sonraki parçanın işaretçisini rastgele bir adrese yazmaktır, böylece daha sonra o belirli adresi ayırmak ve potansiyel olarak işaretçileri yazmak mümkündür.
Ancak, günümüzde, belirtilen kodu çalıştırırsanız, malloc(): unaligned tcache chunk detected
hatasını alırsınız. Bu nedenle, yeni işaretçide yazılacak adresin hizalanmış bir adres olması gerekmektedir (veya yazılan adresin gerçekten hizalanmış olması için ikiliyi yeterince kez çalıştırmak).
Tcache indeksleri saldırısı
Genellikle, yığın başlangıcında tcache içindeki indeks başına parça sayısını ve her tcache indeksinin baş parçasının adresini içeren bir parça bulmak mümkündür. Eğer bu bilgiyi değiştirmek mümkün olursa, bazı indekslerin baş parçasını istenen bir adrese (örneğin __malloc_hook
) işaret edecek şekilde ayarlamak mümkün olacaktır, böylece indeks boyutunda bir parça ayırabilir ve bu durumda __malloc_hook
içeriğini yazabiliriz.
Örnekler
- CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
- Libc bilgi sızıntısı: Tcache'leri doldurmak, düzensiz listeye bir parça eklemek, tcache'i boşaltmak ve düzensiz bin'den parçayı yeniden ayırmak mümkündür; sadece ilk 8B'yi yazarak, parçanın ikinci adresini libc'den sağlam tutarak okuyabiliriz.
- Tcache saldırısı: İkili, 1B yığın taşması için savunmasızdır. Bu, bir ayrılmış parçanın boyut başlığını değiştirerek daha büyük hale getirmek için kullanılacaktır. Ardından, bu parça serbest bırakılacak, sahte boyutun tcache'ine eklenecektir. Sonra, sahte boyutta bir parça ayıracağız ve önceki parça bu parçanın aslında daha küçük olduğunu bilerek dönecektir ve bu, bellekteki bir sonraki parçayı yazma fırsatını sağlar.
Bunu, bir sonraki parçanın FD işaretçisinimalloc_hook
'a işaret edecek şekilde yazmak için kullanacağız, böylece iki işaretçi ayırmak mümkün olacaktır: önce değiştirdiğimiz geçerli işaretçi, ardından ikinci ayırmamalloc_hook
'ta bir parça döndürecektir; bu, bir one gadget yazmak için istismar edilebilir. - CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
- Libc bilgi sızıntısı: Bir serbest bırakma sonrası kullanım ve çift serbest bırakma vardır. Bu yazımda yazar, küçük bir bin içinde yer alan bir parçanın adresini okuyarak libc'nin bir adresini sızdırdı (düzensiz bin'den sızdırmak gibi ama küçük olanından).
- Tcache saldırısı: Bir Tcache, çift serbest bırakma yoluyla gerçekleştirilir. Aynı parça iki kez serbest bırakılır, bu nedenle Tcache içinde parça kendisine işaret eder. Ardından, ayrılır, FD işaretçisi serbest bırakma kancası'na işaret edecek şekilde değiştirilir ve sonra tekrar ayrılır, böylece listedeki bir sonraki parça serbest bırakma kancasında olacaktır. Ardından, bu da ayrılır ve burada
system
adresini yazmak mümkündür, böylece"/bin/sh"
içeren bir malloc serbest bırakıldığında bir shell alırız. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
- Buradaki ana zafiyet, yığın içinde herhangi bir adresi
free
etme kapasitesidir; ofsetini belirterek. - Tcache indeksleri saldırısı: Tcache parça bilgisi içinde depolandığında, 0x100 değeri ile bir adres üretecek bir boyutta bir parça ayırmak ve serbest bırakmak mümkündür. Bu, tcache'in her bin içindeki parça sayısını farklı baytlarda depolamasından kaynaklanmaktadır; bu nedenle, belirli bir indekste bir parça 0x100 değerini üretir.
- Ardından, bu değer, 0x100 boyutunda bir parça varmış gibi görünür. Bu, bu adresi
free
ederek istismar etmeyi sağlar. Bu, o adresi tcache'deki 0x100 boyutundaki parçaların indeksine ekleyecektir. - Sonra, 0x100 boyutunda bir parça ayırarak, önceki adres bir parça olarak dönecek ve diğer tcache indekslerini yazmayı sağlayacaktır.
Örneğin, malloc kancası adresini bunlardan birine koymak ve o indeksin boyutunda bir parça ayırmak, calloc kancasında bir parça almayı sağlayacak; bu da bir one gadget yazmayı mümkün kılacaktır ve bir shell almayı sağlar. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
- Öncekiyle aynı zafiyet, ancak bir ekstra kısıtlama ile.
- Tcache indeksleri saldırısı: Öncekiyle benzer bir saldırı, ancak tcache bilgilerini içeren parçayı serbest bırakarak daha az adım kullanarak gerçekleştirilir; böylece adresi kendi boyutunun tcache indeksine eklenir, böylece o boyutu ayırmak ve tcache parça bilgilerini bir parça olarak almak mümkündür; bu, serbest bırakma kancasını bir indeksin adresi olarak eklemeyi, ayırmayı ve üzerine bir one gadget yazmayı sağlar.
- Math Door. HTB Cyber Apocalypse CTF 2023
fd
işaretçisine bir sayı eklemek için Write After Free.- Bu zorlukta çok fazla heap feng-shui gereklidir. Yazım, Tcache serbest liste başını kontrol etmenin oldukça kullanışlı olduğunu göstermektedir.
stdout
üzerinden Glibc sızıntısı (FSOP).- Tcache zehirlenmesi ile rastgele bir yazma ilkesine ulaşmak.
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.