Tcache Bin Attack
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Tcache bin hakkında daha fazla bilgi için bu sayfayı kontrol edin:
Bins & Memory AllocationsÖ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, serbest bırakılmış bir parçanın içindeki bir binin sonraki parçaya işaret eden işaretçiyi rastgele bir adrese yazmak amacıyla hızlı bin saldırısına çok benzer, böylece daha sonra belirli bir 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).
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.
Libc bilgi sızıntısı: Tcache'leri doldurmak, düzensiz listeye bir parça eklemek, tcache'i boşaltmak ve düzensiz binin içinden 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ı açısından 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çisini malloc_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ırma malloc_hook
'ta bir parça döndürecektir ve bu, bir gadget yazmak için istismar edilebilir.
Libc bilgi sızıntısı: Bir serbest bırakma sonrası kullanım ve çift serbest bırakma vardır. Bu yazıda yazar, küçük bir bin içinde yer alan bir parçanın adresini okuyarak libc'nin bir adresini sızdırdı (düzensiz binin içinden 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 kancaya işaret edecek şekilde değiştirilir ve sonra tekrar ayrılır, böylece listedeki bir sonraki parça serbest kancada 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.
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çeren bir parçanın boyutunun, tcache parça bilgisi içinde depolandığında 0x100 değeri üretecek şekilde ayrılması ve serbest bırakılması mümkündür. Bu, tcache'in her binin 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 yazma imkanı 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 elde etmemizi sağlayacak, bu da bir gadget yazmak için bir shell elde etmemizi sağlar.
Öncekine benzer bir zafiyet, ancak bir ekstra kısıtlama ile.
Tcache indeksleri saldırısı: Öncekine 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 boyutunun tcache indeksine eklenir, böylece o boyutta ayırmak ve tcache parça bilgilerini bir parça olarak almak mümkün olur, bu da serbest kancayı bir indeksin adresi olarak eklemeyi, ayırmayı ve üzerine bir gadget yazmayı sağlar.
fd
işaretçisine bir sayı eklemek için Write After Free.
Bu zorlukta çok fazla heap feng-shui gereklidir. Yazı, Tcache serbest listesi başını kontrol etmenin oldukça kullanışlı olduğunu gösteriyor.
stdout
üzerinden Glibc sızıntısı (FSOP).
Rastgele bir yazma ilkesine ulaşmak için Tcache zehirlenmesi.
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)