Translated ['binary-exploitation/heap/fast-bin-attack.md', 'binary-explo

This commit is contained in:
Translator 2024-06-16 08:46:24 +00:00
parent 0875931248
commit ef98f28176
3 changed files with 93 additions and 67 deletions

View file

@ -2,27 +2,27 @@
<details> <details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları: HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! * **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * [**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)**'da takip edin.** * **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.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. * **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details> </details>
## Temel Bilgiler ## Temel Bilgiler
Hızlı bin nedir hakkında daha fazla bilgi için bu sayfaya bakın: Hızlı bir kutunun ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın:
{% content-ref url="bins-and-memory-allocations.md" %} {% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md) [bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %} {% endcontent-ref %}
Hızlı bin tek yönlü olduğundan diğer kutulardan çok daha az korumaya sahiptir ve sadece **bir serbest bırakılan hızlı bin** parçasındaki bir adresi değiştirmek, daha sonra **herhangi bir bellek adresinde bir parça ayırmak için yeterlidir**. Hızlı kutu tek yönlü olduğundan, diğer kutulardan çok daha az korumaya sahiptir ve sadece **serbest bırakılan bir hızlı kutuda bir adresi değiştirmek**, daha sonra **herhangi bir bellek adresinde bir parça ayırmak için yeterlidir**.
Özetle: Özetle:
@ -44,7 +44,7 @@ ptr3 = malloc(0x20); // This will get a chunk in the <address> which could be ab
``` ```
{% endcode %} {% endcode %}
Çok iyi açıklanmış bir kod içeren tam bir örnek bulabilirsiniz: [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html): Çok iyi açıklanmış bir kod içeren tam bir örneği [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html) adresinden bulabilirsiniz:
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -140,16 +140,20 @@ Eğer global değişken **`global_max_fast`**'in değeri büyük bir sayıyla ü
## Örnekler ## Örnekler
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:** * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
* Parçalar tahsis edilebilir, sonra serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (taşma güvenlik açığı ile). * Parçalar tahsis edilebilir, sonra serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile).
* **Infoleak için parça birleştirme**: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir prev\_size oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu sayede başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc'nin bir adresini sızdırmak mümkün olur (main\_arena+88). * **Infoleak için parça birleştirme**: Teknik temelde taşmayı kötüye kullanarak sahte bir prev\_size oluşturmak ve bir önceki parçaların daha büyük bir parçanın içine yerleştirilmesini sağlamaktır, böylece başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verilerini yazdırmak ve libc adresini sızdırmak mümkün olur (main\_arena+88).
* **Malloc hook üzerine yazma**: Bunun için ve önceki üst üste gelme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkün oldu. Dolayısıyla, ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakılarak) aynı parçayı fast binde 2 kez elde etmek mümkün oldu. Sonra, adresi bir kez daha tahsis etmek, bir sonraki parçanın adresini malloc\_hook'un biraz öncesine işaret edecek şekilde üzerine yazmak (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmek ve ardından malloc hook adresini alacak başka bir parça tahsis etmek mümkün oldu.\ * **Malloc hook üzerine yazma**: Bunun için ve önceki üst üste gelme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkün oldu. Dolayısıyla, ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak) aynı parçayı fast binde 2 kez elde etmek mümkün oldu. Sonra, adresi bir kez daha tahsis etmek, bir sonraki parçanın adresini malloc\_hook'un biraz öncesine işaret etmek (böylece malloc'un bir boş boyut olduğunu düşündüğü bir tamsayıya işaret etmek - başka bir atlatma), bunu tekrar tahsis etmek ve ardından malloc hook adresini alacak başka bir parça tahsis etmek mümkün oldu.\
Sonunda bir **one gadget** oraya yazıldı. Sonunda bir **one gadget** oraya yazıldı.
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:** * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
* Bir heap taşması ve kullanıcıdan sonra serbest bırakma ve çift serbest bırakma var çünkü bir parça serbest bırakıldığında işaretçileri tekrar kullanıp serbest bırakmak mümkündür. * Bir heap taşması ve kullanıcı sonrası serbest bırakma ve çift serbest bırakma var çünkü bir parça serbest bırakıldığında işaretçileri tekrar kullanmak ve yeniden serbest bırakmak mümkündür
* **Libc bilgi sızıntısı**: Bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacaklar. Serbest bırakılan işaretçileri tekrar kullanabileceğiniz için, bu adresi okuyun. * **Libc bilgi sızıntısı**: Bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacaklar. Serbest bırakılan işaretçileri tekrar kullanabileceğiniz için, bu adresi okuyun.
* **Fast bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç fast bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini `free`'nin got adresine işaret edecek şekilde üzerine yazabiliriz, ardından parça 1 `"/bin/sh"` yazabiliriz ve sonra `chunk1`'i `free(chunk1)` yapabiliriz ki bu da `system("/bin/sh")`'yi çalıştıracaktır. * **Fast bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç fast bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini `free`'nin got adresine işaret etmek üzere üzerine yazabiliriz, böylece system'e işaret etmek üzere parça 1 `"/bin/sh"` yazabiliriz ve ardından `free(chunk1)` yapabiliriz ki bu da `system("/bin/sh")`'yi çalıştıracaktır.
* Bir Fast Bin saldırısının bir sıralanmamış bin saldırısı aracılığıyla kötüye kullanıldığına dair bir örnek bulabilirsiniz. * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Not&#x20; * Bir 1B taşmayı kötüye kullanarak parçaları sıralanmamış binde birleştirme ve bir libc bilgi sızıntısı almak ve ardından malloc hook'u bir one gadget adresiyle üzerine yazmak için fast bin saldırısı örneği
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
* Bir infoleak'ten sonra sıralanmamış binleri kötüye kullanarak bir libc adresi ve bir PIE adresi sızdırmak için bir UAF ile sıralanmamış binleri kötüye kullanarak, bu CTF'nin saldırısı, kontrol edilen parçaların bulunduğu yere bir parça tahsis etmek için fast bin saldırısı kullanarak belirli işaretçileri üzerine yazmak mümkün olduğundan belirli işaretçileri üzerine yazmak mümkün oldu.
* Bir Fast Bin saldırısının bir sıralanmamış bin saldırısı aracılığıyla kötüye kullanıldığını bulabilirsiniz:
* Hızlı bin saldırıları gerçekleştirmeden önce, gerektiğinde libc/heap adreslerini sızdırmak için sıralanmamış liste kötüye kullanımının yaygın olduğunu unutmayın.
{% content-ref url="unsorted-bin-attack.md" %} {% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md) [unsorted-bin-attack.md](unsorted-bin-attack.md)
@ -157,14 +161,14 @@ Sonunda bir **one gadget** oraya yazıldı.
<details> <details>
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları: HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **💬 Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** * **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. * **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın**.
</details> </details>

View file

@ -6,17 +6,17 @@
HackTricks'ı desteklemenin diğer yolları: HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! * **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu * [**The PEASS Ailesi**]'ni (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'ler**]'imiz (https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **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.** * **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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. * **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details> </details>
## Temel Bilgiler ## Temel Bilgiler
Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni sürümü daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir. Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni versiyonu daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir.
### Kod Örneği: ### Kod Örneği:
@ -89,46 +89,63 @@ return 0;
``` ```
</details> </details>
* Saldırı, tcaches kullanılıyorsa çalışmaz (2.26 sonrası) * Saldırı, tcaches kullanıldığında çalışmaz (2.26'dan sonra)
### Amaç ### Amaç
Bu saldırı, **bir parçanın işaretçisini kendisinden 3 adres öncesine işaret etmek** için izin verir. Eğer bu yeni konum (işaretçinin bulunduğu yerin çevresi) ilginç şeyler içeriyorsa, diğer kontrol edilebilir tahsisler / yığın gibi..., bunları okuyup/üzerine yazarak daha büyük zarara neden olmak mümkündür. Bu saldırı, **bir parçanın işaretçisini kendisinden 3 adres öncesine işaret edecek şekilde değiştirmeyi** sağlar. Eğer bu yeni konum (işaretçinin bulunduğu yerin çevresi) ilginç şeyler içeriyorsa, diğer kontrol edilebilir tahsisler / yığın gibi..., bunları okuyup/üzerine yazarak daha büyük zarara neden olmak mümkündür.
* Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres önce işaret ediyor ve kullanıcı potansiyel olarak bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır. * Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres önceye işaret ediyor ve kullanıcı potansiyel olarak bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır
* CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres önce işaret etmesi ve okuyup yazabilmesi sayesinde diğer işaretçileri başka adreslere işaret etmesi mümkün olacaktır. Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlarda yeni adresler üzerine yazabilir (örneğin GOT'ta). * CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres öncesine işaret etmesi ve okuyup yazabilmesi sayesinde diğer işaretçilerin başka adreslere işaret etmesi mümkün olacaktır.\
Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlara yeni adresler üzerine yazabilir (örneğin GOT'ta).
### Gereksinimler ### Gereksinimler
* Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak, bazı özniteliklere değerler vererek birkaç parça oluşturmak için. * Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak için bazı özelliklere değerler vererek bir çift parça oluşturmak.
* Sahte parçanın işaretçilerini ayarlamak için yığın sızıntısı. * Sahte parçanın işaretçilerini ayarlamak için yığın sızıntısı.
### Saldırı ### Saldırı
* Birkaç parça bulunmaktadır (parça1 ve parça2) * Bir çift parça bulunmaktadır (parça1 ve parça2)
* Saldırgan parça1'in içeriğini ve parça2'nin başlıklarını kontrol eder. * Saldırgan parça1'in içeriğini ve parça2'nin başlıklarını kontrol eder.
* Parça1'de saldırgan sahte bir parça yapısını oluşturur: * Parça1'de saldırgan sahte bir parça yapısını oluşturur:
* Korumaları atlatmak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası oluşmaz * Korumaları atlatmak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası alınmaz
* ve sahte parçanın `fd` ve `bk` alanları, sahte parçanın depolandığı yerin -3 ve -2 ofsetlerinde işaret eder, böylece `fake_chunk->fd->bk` ve `fake_chunk->bk->fd` gerçek parça1 adresinin bulunduğu bellek (yığın) konumuna işaret eder: * ve sahte parçanın `fd` ve `bk` alanları, sahte parçanın depolandığı yer olan parça1 işaretçisinin -3 ve -2 ofsetlerinde bulunan yere işaret eder, böylece `sahte_parça->fd->bk` ve `sahte_parça->bk->fd` gerçek parça1 adresinin bulunduğu bellek (yığın) konumuna işaret eder:
<figure><img src="../../.gitbook/assets/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
* Parça2'nin başlıkları değiştirilir ve önceki parçanın kullanılmadığını ve sahte parçanın içerdiği boyutun boyutunu gösterir. * Parça2'nin başlıkları değiştirilir ve önceki parçanın kullanılmadığını ve sahte parçanın içerdiği boyutun boyutunu gösterir.
* İkinci parça serbest bırakıldığında, bu sahte parça bağlantısı kesilir: * İkinci parça serbest bırakıldığında, bu sahte parça bağlantısı kesilir:
* `fake_chunk->fd->bk` = `fake_chunk->bk` * `sahte_parça->fd->bk` = `sahte_parça->bk`
* `fake_chunk->bk->fd` = `fake_chunk->fd` * `sahte_parça->bk->fd` = `sahte_parça->fd`
* Daha önce `fake_chunk->fd->bk` ve `fake_chunk->fd->bk`'nin aynı yere işaret ettiği sağlandı (parça1'in depolandığı yığın konumu, bu nedenle geçerli bir bağlı liste idi). Çünkü **her ikisi de aynı yere işaret ediyor**, sadece sonuncu olan (`fake_chunk->bk->fd = fake_chunk->fd`) **etkili** olacaktır. * Daha önce `sahte_parça->fd->bk` ve `sahte_parça->fd->bk`'nin aynı yere işaret ettiği sağlandı (parça1'in depolandığı yığın konumu, bu nedenle geçerli bir bağlı liste idi). **Her ikisi de aynı yere işaret ettiği için** sadece sonuncu (`sahte_parça->bk->fd = sahte_parça->fd`) **etkili** olacaktır.
* Bu, yığında parça1 işaretçisini yığında kendisinden 3 adres önce depolanan adrese (veya baytlara) **üzerine yazacaktır**. * Bu, yığında parça1 işaretçisini yığında kendisinden 3 adres önce depolanan adrese (veya baytlara) **üzerine yazacaktır**.
* Dolayısıyla, bir saldırgan parça1'in içeriğini kontrol edebilirse, yığının içine **yazabilecektir**, potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirebilir ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirebilir. Hatta tekrar parça1'in yığında depolanan adresini farklı bir konuma değiştirerek, eğer saldırgan tekrar parça1'in içeriğini kontrol edebilirse herhangi bir yere yazabilir. * Dolayısıyla, bir saldırgan parça1'in içeriğini tekrar kontrol edebilirse, yığının içine **yazabilecektir**, potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirebilir ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirebilir. Hatta yine parça1'in yığında depolanan adresini saldırgan tekrar kontrol edebilirse, herhangi bir yere yazabilir.
* Bu, **adreslerin yığında depolandığı için** mümkün oldu. Risk ve sömürü, sahte parça adreslerinin **nerede depolandığına bağlı olabilir**. * Bu, **adreslerin yığında depolandığı için** mümkün oldu. Risk ve sömürü, sahte parçanın adreslerinin **nerede depolandığına bağlı olabilir**.
<figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
## Referanslar ## Referanslar
* [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit) * [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit)
* Bir CTF'de bile unlink saldırısı bulmak garip olabilir ancak bu saldırının kullanıldığı bazı yazılara buradan ulaşabilirsiniz: * CTF'de bile bir unlink saldırısı bulmak garip olabilir ancak bu saldırının kullanıldığı bazı yazılımlar burada bulunmaktadır:
* CTF örneği: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html) * CTF örneği: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
* Bu örnekte, yığın yerine malloc edilmiş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, buraya bir parça tahsis edebilmek için gerçekleştirilir, bu nedenle malloc edilmiş adreslerin dizisinin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır. * Bu örnekte, yığın yerine malloc edilmiş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, bir parça buraya tahsis edilebilmek için gerçekleştirilir, bu nedenle malloc edilmiş adreslerin dizisinin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır.
* Başka bir CTF örneği: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html) * Başka bir CTF örneği: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* Önceki örnekte olduğu gibi, tahsis edilen adreslerin bir dizisi bulunmaktadır. Bir unlink saldırısı gerçekleştirerek, ilk tahsis edilen adresin dizinin başlangıcından birkaç konum öncesine işaret etmesi sağlanabilir ve ardından bu tahsis edilen adres yeni konumda üzerine yazılabilir. Bu nedenle, diğer tahsislerin işaretçileri GOT'a işaret etmesi, bir libc sızıntısı almak için yazdırılması ve ardından atoi GOT'unu bir gadget adresine değiştirmek mümkün olacaktır. * Önceki örnekte olduğu gibi, tahsis edilen adreslerin bir dizisi bulunmaktadır. Bir unlink saldırısı gerçekleştirerek, ilk tahsis edilen adresin dizinin başlangıcından birkaç konum öncesine işaret etmesi sağlanabilir ve ardından bu tahsis edilen adres yeni konumda üzerine yazılabilir. Bu nedenle, diğer tahsislerin işaretçileri GOT'a işaret etmek üzere üzerine yazılabilir, libc sızıntısı almak için yazdırılabilir ve ardından atoi GOT'u bir tek seferlik işlev adresiyle değiştirilebilir.
* Unlink saldırısına oldukça benzer bir zayıflığı istismar eden özel malloc ve free işlevleriyle CTF örneği: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* Özel malloc'un FD ve BK işaretçilerini kontrol etmeyi sağlayan bir taşma vardır ve bu (özel) serbest bırakılacak. Dahası, yığında exec biti bulunmaktadır, bu nedenle bir yığın adresi sızdırmak ve GOT'tan bir işlevi bir yığın parçasına bir kabuk koduyla işaret etmek mümkündür.
<details>
<summary><strong>Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* **Ş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!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
</details>

View file

@ -6,55 +6,58 @@
HackTricks'ı desteklemenin diğer yolları: HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) * [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * [**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)**'da takip edin.** * **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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. * **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun.
</details> </details>
## Temel Bilgiler ## Temel Bilgiler
Sıralanmamış bir liste, bir parçanın `bk` adresindeki `sıralanmamış_parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini değiştirebilirse, bu adresi rastgele bir adrese yazabilir ve bu, bir libc adresini sızdırmak veya bazı savunmaları atlamak için yardımcı olabilir. Sıralanmamış bir liste, bir parçanın `bk` adresindeki `sıralanmamış_parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini **değiştirebilirse**, bu adresi **rastgele bir adrese yazabilir** ve bu, bir libc adresini sızdırmak veya bazı savunmaları atlamak için faydalı olabilir.
Yani, temelde bu saldırı, bir adrese büyük bir sayı (bir heap adresi veya bir libc adresi olabilecek bir adres) yazmayı sağladı. Bu, sızdırılabilecek bir yığın adresi veya global değişken olan `global_max_fast` gibi bir kısıtlamayı geçmek için hızlı binlerin daha büyük boyutlarında hızlı binler oluşturmasına izin vermek için kullanılabilir (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek). Yani, temelde bu saldırı, **bazı rastgele adresleri büyük bir sayıyla** (bir heap adresi veya bir libc adresi olabilecek bir adres) **üzerine yazmaya izin verdi**. Bu, sızdırılabilecek bir yığın adresi veya küresel değişken **`global_max_fast`** gibi bir kısıtlamayı sızdırmaya izin vererek daha büyük boyutlarda hızlı binler oluşturmasına izin vermek için kullanılabilir (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek).
{% hint style="success" %} {% hint style="success" %}
[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakarak ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanarak (tcaches'i önlemek için) günümüzde **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`** hatasının tetiklendiğini görebilirsiniz. [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakarak ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanarak (tcaches'i önlemek için) **günümüzde** artık hata **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`** tetiklenmektedir.
Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de sahip olmalıdır, böylece bu, `victim->bck->fd == victim` veya `victim->fd == av (arena)` olmalıdır. Bu, yazmak istediğimiz adresin, sahte parçanın `fd` konumunda olması gerektiği ve sahte parçanın `fd`nin arenaya işaret etmesi gerektiği anlamına gelir. Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de ihtiyaç duyar, böylece bu, `victim->bck->fd == victim` veya `victim->fd == av (arena)` olmadığından bu atlatılır. Bu, yazmak istediğimiz adresin, sahte parçanın `fd` konumunda olması gerektiği ve sahte parçanın `fd`nin arenaya işaret ettiği anlamına gelir.
{% endhint %} {% endhint %}
{% hint style="danger" %} {% hint style="danger" %}
Bu saldırı sıralanmamış bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece **hızlı binlerden tahsisler kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çökecektir.** Bu saldırı sıralanmamış bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi **yalnızca hızlı binlerden tahsisler kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çökecektir.**
Bu durumda **`global_max_fast`** yapmak, hızlı binin tüm diğer tahsislerle ilgileneceğine güvenmek bu durumda yardımcı olabilir ve saldırı tamamlandığında hızlı bir binde parçalar oluşturulabilir. Bu durumda **`global_max_fast`** yapmak, hızlı binin tüm diğer tahsislerle ilgileneceğine güvenmek bu durumda yardımcı olabilir ve saldırı tamamlandığında hızlı bir bin saldırısına izin verebilir.
{% endhint %} {% endhint %}
[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklıyor, ancak malloc'ları tcache'e sona ermeyecek kadar büyük bir bellek ayırmak için değiştirirseniz, önce bahsedilen hata ortaya çıkarak bu tekniği engellediğini görebilirsiniz: **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`** [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklar, ancak malloc'ları tcache'e sona ermeyecek kadar büyük bir bellek ayırmak için değiştirirseniz, önce bahsedilen hata ortaya çıkar ve bu tekniği engeller: **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`**
## Sıralanmamış Bin Bilgi Sızdırma Saldırısı ## Sıralanmamış Bin Bilgi Sızdırma Saldırısı
Bu aslında çok temel bir kavramdır. Sıralanmamış bindeki parçalar, bin oluşturmak için çift işaretçilere sahip olacaklardır. Sıralanmamış bindeki ilk parça aslında **FD** ve **BK** bağlantılarını **ana arenanın (libc)** bir kısmına işaret edecek şekilde olacaktır.\ Bu aslında çok temel bir kavramdır. Sıralanmamış bindeki parçalar, bin oluşturmak için çift işaretçilere sahip olacaklardır. Sıralanmamış bindeki ilk parça aslında **FD** ve **BK** bağlantılarını **ana arenanın (libc)** bir kısmına işaret edecek şekilde olacaktır.\
Bu nedenle, bir parçayı sıralanmamış bir bine yerleştirebilir ve onu okuyabilirsiniz (kullanımdan sonra serbest bırakma) veya en azından 1 işaretçiyi üzerine yazmadan tekrar tahsis edebilir ve ardından onu **okuyabilirseniz**, bir **libc bilgi sızıntısı** elde edebilirsiniz. Bu nedenle, bir parçayı sıralanmamış bir bine yerleştirebilir ve onu okuyabilirsiniz (serbest bırakıldıktan sonra kullan) veya en azından 1 işaretçiyi üzerine yazmadan tekrar tahsis edebilir ve ardından onu **okuyabilirseniz**, bir **libc bilgi sızıntınız** olabilir.
Bu yazıda kullanılan benzer bir [**saldırı**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), 4 parçalık bir yapıyı (A, B, C ve D - D yalnızca üst parçayla birleşmeyi önlemek için) kötüye kullanmaktı, böylece B'de bir null bayt taşması kullanılarak C'nin B'nin kullanılmadığını göstermesi sağlandı. Ayrıca, B'de `prev_size` verisi değiştirildi, böylece boyut B'nin boyutu olmak yerine A+B oldu.\
Ardından C serbest bırakıldı ve A+B ile birleştirildi (ancak B hala kullanımda idi). A boyutunda yeni bir parça tahsis edildi ve ardından sızdırılan libc adresleri B'ye yazıldı ve oradan sızdırıldı.
## Referanslar ve Diğer Örnekler ## Referanslar ve Diğer Örnekler
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap) * [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* Amacı, global bir değişkeni 4869'dan büyük bir değerle üzerine yazmaktır, böylece bayrağı almak mümkün olur ve PIE etkin değildir. * Amacı, bir global değişkeni 4869'dan büyük bir değerle üzerine yazmak ve bayrağı almak mümkün kılmaktır ve PIE etkin değildir.
* Keyfi boyutlarda parçalar oluşturulabilir ve istenen boyutta bir yığın taşması vardır. * Keyfi boyutlarda parçalar oluşturulabilir ve istenen boyutta bir yığın taşması vardır.
* Saldırı, taşmanın kötüye kullanılması için 3 parça oluşturarak başlar: taşmayı kötüye kullanmak için chunk0, taşınacak chunk1 ve önceki parçaları birleştirmemesi için chunk2. * Saldırı, 3 parça oluşturarak başlar: taşmayı kötüye kullanmak için chunk0, taşmaya uğrayacak chunk1 ve önceki parçaların birleşmesini önlemek için chunk2.
* Ardından, chunk1 serbest bırakılır ve chunk0 taşmaya uğratılır, böylece chunk1'in `bk` işaretçisi şuna işaret eder: `bk = magic - 0x10` * Ardından, chunk1 serbest bırakılır ve chunk0 taşmaya uğratılır, böylece chunk1'in `bk` işaretçisi şuna işaret eder: `bk = magic - 0x10`
* Ardından, chunk1 ile aynı boyutta chunk3 tahsis edilir, bu da sıralanmamış bin saldırısını tetikler ve global değişkenin değerini değiştirir, bayrağı almayı mümkün kılar. * Ardından, chunk1 ile aynı boyutta chunk3 tahsis edilir, bu da sıralanmamış bin saldırısını tetikleyecek ve global değişkenin değerini değiştirecek, bayrağı almayı mümkün kılacaktır.
* [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html) * [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html)
* Birleştirme işlevi savunmasızdır çünkü geçilen her iki dizin de aynıysa onu yeniden boyutlandırır ve ardından serbest bırakır ancak kullanılabilecek bir serbest bırakılmış bölgeye bir işaretçi döndürür. * Birleştirme işlevi, geçilen her iki dizin de aynı olduğunda onu yeniden boyutlandıracağı ve ardından serbest bırakacağı ancak o serbest bırakılan bölgeye bir işaretçi döndüreceği için savunmasızdır.
* Bu nedenle, **2 parça oluşturulur**: **chunk0** kendisiyle birleştirilecek ve üst parçayla birleşmesini önlemek için chunk1. Ardından, **birleştirme işlevi chunk0 ile iki kez çağrılır**, bu da kullanımdan sonra serbest bırakma hatasına neden olur. * Bu nedenle, **2 parça oluşturulur**: **chunk0** kendisiyle birleştirilecek ve üst parçayla birleşmesini önlemek için chunk1. Ardından, **birleştirme işlevi chunk0 ile iki kez çağrılır**, bu da bir kullanımdan sonra serbest bırakma hatasına neden olur.
* Ardından, **`view`** işlevi kullanımdan sonra serbest bırakılan parçanın dizini olan 2 ile çağrılır, bu da bir libc adresi **sızdırır**. * Ardından, **`view`** işlevi, kullanım sonrası serbest bırakma parçasının dizini olan 2 ile çağrılır, bu da bir libc adresi **sızdırır**.
* Binary, sadece **`global_max_fast`**'tan büyük boyutlarda malloc yapmasına izin veren korumalara sahip olduğundan hiçbir fastbin kullanılmaz, bu nedenle sıralanmamış bin saldırısı, global değişken `global_max_fast`'ı üzerine yazmak için kullanılacaktır. * Binary, sadece **`global_max_fast`**'tan büyük boyutlarda malloc yapmasına izin verdiği için hiçbir fastbin kullanılmadığından, sıralanmamış bin saldırısı, global değişken `global_max_fast`'ı üzerine yazmak için kullanılacaktır.
* Ardından, kullanımdan sonra serbest bırakılan işaretçi olan 2 diziniyle edit işlevi çağrılabilir ve `bk` işaretçisinin `p64(global_max_fast-0x10)`'a işaret etmesi sağlanabilir. Ardından, yeni bir parça oluşturulduğunda önceki tehlikeye atıfta bulunan serbest bırakma adresi (0x20) **sıralanmamış bin saldırısını tetikleyecektir**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı binlerde parçalar oluşturulabilir. * Ardından, kullanım sonrası serbest bırakma işaretçisi olan 2 diziniyle edit işlevi çağrılabilir ve `bk` işaretçisinin `p64(global_max_fast-0x10)`'a işaret etmesi sağlanabilir. Ardından, yeni bir parça oluşturulduğunda önceki kompromize edilmiş serbest adresi (0x20) kullanılacak ve **sıralanmamış bin saldırısı tetiklenecek**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı binlerde parçalar oluşturulabilir.
* Şimdi bir **hızlı bin saldırısı** gerçekleştirilir: * Şimdi bir **hızlı bin saldırısı** gerçekleştirilir:
* İlk olarak, **`__free_hook`** konumunda **200 boyutunda hızlı parçalarla çalışılabileceği keşfedilir**: * İlk olarak, **`__free_hook`** konumunda **200 boyutunda hızlı parçalarla çalışılabileceği** keşfedilir:
* <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook * <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 &#x3C;__free_hook> $1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 &#x3C;__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59 gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
@ -63,22 +66,24 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
</code></pre> </code></pre>
* Eğer bu konumda boyutu 0x200 olan hızlı bir parça elde edebilirsek, çalıştırılacak bir işlev işaretçisini üzerine yazmak mümkün olacaktır. * Eğer bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır
* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş işlev bu işaretçiyle iki kez çağrılır, bu şekilde hızlı bin içinde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parça işaretçisi elde edilir. * Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde hızlı binde boyutu `0xfc*2 = 0x1f8` olan bir serbest parça işaretçisi elde edilir.
* Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** işlevine işaret etmek için düzenleme işlevi çağrılır. * Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** fonksiyonuna işaret etmek için düzenleme fonksiyonu çağrılır.
* Daha sonra, hızlı bin içindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** işlevinin adresiyle üzerine yazılmış bir hızlı bin parçası alınır. * Daha sonra, hızlı bindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** fonksiyonunun adresiyle üzerine yazılmış bir hızlı bin parçası alınır.
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça, silme işlevini çağırarak serbest bırakılır, **`__free_hook`** işlevini tetikleyerek `/bin/sh\x00` parametresiyle sistem işlevine işaret eder. * Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılırken silme fonksiyonu çağrılır, **`__free_hook`** fonksiyonunu tetikleyerek `/bin/sh\x00` parametresiyle system fonksiyonuna işaret eder.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Unsorted binde bir 1B taşma kullanarak parçaları birleştirme ve bir libc bilgi sızıntısı alıp ardından malloc hook'u bir one gadget adresiyle üzerine yazmak için hızlı bin saldırısı yapmanın başka bir örneği
<details> <details>
<summary><strong>Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları: HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) arasında * [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 **Discord grubuna** katılın (https://discord.gg/hRep4RUj7f) veya **telegram grubuna** (https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin. * 💬 **Discord grubuna** katılın veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. * **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek.
</details> </details>