<summary><strong>AWS hackleme konusunda sıfırdan kahramana dönüşün</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile öğrenin!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
[**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) ö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).
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.
* **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**.
* **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.
* 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.
* 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.