hacktricks/binary-exploitation/heap/tcache-bin-attack.md

6.8 KiB
Raw Blame History

Tcache Bin Saldırısı

AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin!

HackTricks'i desteklemenin diğer yolları:

Temel Bilgiler

Tcache bin nedir hakkında daha fazla bilgi için bu sayfaya bakın:

{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}

İlk olarak, Tcache glibc sürümü 2.26'da tanıtıldı.

guyinatuxido sayfasında önerilen Tcache saldırısı, hedeflenen amaç, bir serbest bırakılmış parçanın içindeki bir kovadaki bir sonraki parça işaretçisini isteğe bağlı bir adrese üzerine yazmak olduğu hızlı kova saldırısına çok benzerdir, böylece daha sonra o belirli adrese tahsis edilebilir ve potansiyel olarak işaretçiler üzerine yazılabilir.

Ancak, günümüzde, bahsedilen kodu çalıştırırsanız hata alırsınız: malloc(): hizalanmamış tcache parçası tespit edildi. Bu nedenle, yeni işaretçiye hizalanmış bir adres yazmak gereklidir (veya yazılan adresin gerçekten hizalandığı binary'yi yeterince kez çalıştırmak).

Tcache indeks saldırıları

Genellikle, heap'in başlangıcında, tcache içindeki her indeksteki parça miktarını ve her tcache indeksinin baş parça adresini içeren bir parça bulunabilir. Bu bilgiyi değiştirmek mümkün olduğunda, bazı indekslerin baş parçasını istenilen bir adrese yönlendirmek mümkün olacaktır (örneğin malloc hook gibi) ve daha sonra bu durumda malloc hook içeriğini üzerine yazmak mümkün olacaktır.

Örnekler

  • CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
  • Libc bilgi sızıntısı: Tcache'leri doldurmak, bir parçayı sıralanmamış listeye eklemek, tcache'yi boşaltmak ve ardından sadece ilk 8B'yi üzerine yazarak sıralanmamış kovadan parçayı yeniden tahsis etmek mümkün olacak, ikinci adresi parçadan libc'ye bırakarak okuyabileceğiz.
  • Tcache saldırısı: Binary, 1B heap taşmasına karşı savunmasızdır. Bu, ayrılmış bir parçanın boyut başlığını değiştirmek için kötüye kullanılacaktır. Daha sonra, bu parça serbest bırakılacak, sahte boyuttaki parçaların tcache'ine eklenerek. Ardından, sahte boyutta bir parça tahsis edilecek ve önceki parça gerçekte daha küçük olduğu bilinerek geri dönecek ve bu, bellekteki bir sonraki parçayı üzerine yazma fırsatı verecektir.
    Bu, bir sonraki parçanın FD işaretçisini üzerine yazmak için kötüye kullanılacaktır malloc_hook'a işaret etmek, böylece ilk olarak değiştirdiğimiz meşru işaretçiyi tahsis edebilecek ve ardından ikinci tahsis, malloc_hook'ta bir parça döndürecektir ve bu, bir tek parça yazmak için kötüye kullanılabilir.
  • CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
  • Libc bilgi sızıntısı: Use after free ve double free var. Bu yazıda yazar, küçük bir kovaya yerleştirilen bir parçanın adresini okuyarak libc'nin bir adresini sızdırdı (sıralanmamış kovadan değil, küçük kovadan sızdırmak gibi).
  • Tcache saldırısı: Bir çift serbest bırakma ile bir Tcache gerçekleştirilir. Aynı parça iki kez serbest bırakıldığında, tcache içinde parça kendisine işaret edecektir. Daha sonra, tahsis edilir, FD işaretçisi free hook'a işaret etmek üzere değiştirilir ve ardından tekrar tahsis edilir, böylece listedeki bir sonraki parça free hook'ta olacaktır. Ardından, bu da tahsis edilir ve buraya system'in adresini yazmak mümkün olacak, böylece "/bin/sh" içeren bir malloc serbest bırakıldığında bir shell alınır.
  • CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
  • Buradaki ana zayıflık, offsetini belirterek heap'te herhangi bir adresi serbest bırakma kapasitesidir.
  • Tcache indeks saldırıları: Tcache parçasına (tcache kovalarının bilgilerini içeren parça) depolanacak bir boyutta bir parça tahsis edip serbest bırakmak, farklı baytlarda her kovadaki parça miktarını depoladığı için 0x100 değerine sahip bir adres oluşturacaktır.
  • Sonra, bu değer 0x100 boyutunda bir parça olduğu gibi görünür. Bu adresi free ile kötüye kullanmaya izin verecektir. Bu, bu adresi tcache içindeki 0x100 boyutundaki parça indeksine ekleyecektir.
  • Ardından, boyutu 0x100 olan bir parça tahsis edildiğinde, önceki adres bir parça olarak geri dönecek ve diğer tcache indekslerini üzerine yazma olanağı sağlayacaktır.
    Örneğin, malloc hook adresini birine koyarak ve o indeksin boyutunda bir parça tahsis ederek calloc hook'ta bir parça almak, bir tek parça yazmak için kötüye kullanılabilir ve bir shell almak mümkün olacaktır.
  • CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
  • Bir öncekiyle aynı zayıflık, bir ek kısıtlama ile
  • Tcache indeks saldırıları: Bir önceki saldırıya benzer saldırı ancak tcache bilgilerini içeren parçayı serbest bırakarak daha az adımla yapılır, böylece adresi, boyutuna göre tcache indeksine eklenir ve bu boyutta tahsis edilebilir ve tcache parça bilgilerini bir parça olarak almak mümkün olur, bu da bir indeksin adresini free hook olarak eklemeyi, tahsis etmeyi ve üzerine bir tek parça yazmayı mümkün kılar.