mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 14:10:41 +00:00
Translated ['binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc
This commit is contained in:
parent
d0602f7d36
commit
b6841ed0eb
6 changed files with 253 additions and 30 deletions
|
@ -736,6 +736,7 @@
|
|||
* [Fast Bin Attack](binary-exploitation/heap/fast-bin-attack.md)
|
||||
* [Unsorted Bin Attack](binary-exploitation/heap/unsorted-bin-attack.md)
|
||||
* [Large Bin Attack](binary-exploitation/heap/large-bin-attack.md)
|
||||
* [Tcache Bin Attack](binary-exploitation/heap/tcache-bin-attack.md)
|
||||
* [Off by one overflow](binary-exploitation/heap/off-by-one-overflow.md)
|
||||
* [House of Spirit](binary-exploitation/heap/house-of-spirit.md)
|
||||
* [House of Lore](binary-exploitation/heap/house-of-lore.md)
|
||||
|
@ -762,7 +763,7 @@
|
|||
* [WWW2Exec - atexit()](binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md)
|
||||
* [WWW2Exec - .dtors & .fini\_array](binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)
|
||||
* [WWW2Exec - GOT/PLT](binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md)
|
||||
* [WWW2Exec - \_\_malloc\_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-\_\_malloc\_hook.md)
|
||||
* [WWW2Exec - \_\_malloc\_hook & \_\_free\_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-\_\_malloc\_hook.md)
|
||||
* [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
|
||||
* [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
# WWW2Exec - \_\_malloc\_hook
|
||||
# WWW2Exec - \_\_malloc\_hook & \_\_free\_hook
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
|
||||
<summary><strong>AWS hackleme konusunda sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Diğer HackTricks'i destekleme 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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||
* [**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
|
||||
* **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ı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
|
||||
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
|
||||
|
||||
</details>
|
||||
|
||||
## **Malloc Hook**
|
||||
|
||||
[Resmi GNU sitesine](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) göre, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**.
|
||||
[Resmi GNU sitesinde](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) belirtildiği gibi, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**.
|
||||
|
||||
Malloc'ı çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısını yaparak `libc`'nin bunları yığında ayırmak için malloc çağırmasını sağlamak mümkündür.
|
||||
Malloc'ı çağırmak için programın onu çağırmasını beklemek mümkündür veya **`printf("%10000$c")`** çağrılarak da mümkündür, bu da çok fazla bayt ayırarak `libc`'in bunları yığında ayırmak için malloc çağırmasını sağlar.
|
||||
|
||||
One Gadget hakkında daha fazla bilgi için:
|
||||
|
||||
|
@ -30,6 +30,31 @@ One Gadget hakkında daha fazla bilgi için:
|
|||
Kancaların **GLIBC >= 2.34** için **devre dışı bırakıldığını** unutmayın. Modern GLIBC sürümlerinde kullanılabilecek diğer teknikler bulunmaktadır. Bakınız: [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
|
||||
{% endhint %}
|
||||
|
||||
## Free Hook
|
||||
|
||||
Bu, bir sıralı olmayan bin saldırısını kötüye kullanıp hızlı bir bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanılmıştır:
|
||||
|
||||
{% content-ref url="../heap/unsorted-bin-attack.md" %}
|
||||
[unsorted-bin-attack.md](../heap/unsorted-bin-attack.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Şimdi bir **hızlı bin saldırısı** gerçekleştiriliyor:
|
||||
|
||||
* İlk olarak, **`__free_hook`** konumunda **200 boyutunda hızlı parçalarla çalışmanın mümkün olduğu keşfedilir**:
|
||||
* <pre class="language-c"><code class="lang-c">gef➤ p &__free_hook
|
||||
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
|
||||
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
|
||||
<strong>0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
|
||||
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
</code></pre>
|
||||
* Eğer bu konumda 0x200 boyutunda hızlı bir parça elde edilirse, **yürütülecek bir işlev 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ı bir parçanın boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır.
|
||||
* Ardından, bu hızlı parçanın **`fd`** adresini önceki **`__free_hook`** işlevine işaret etmesi için bu parçada düzenleme işlevi çağrılır.
|
||||
* Daha sonra, hızlı bir parçadan önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`**'ta hızlı bir parça parçası alınır ve üzerine **`system`** işlevinin adresiyle üzerine yazılır.
|
||||
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılarak silme işlevi çağrılır, **`__free_hook`** işlevi tetiklenir ve `/bin/sh\x00` parametresiyle sistem işlevine işaret eder.
|
||||
|
||||
## Referanslar
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
||||
|
@ -37,14 +62,14 @@ Kancaların **GLIBC >= 2.34** için **devre dışı bırakıldığını** unutma
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
|
||||
<summary><strong>AWS hackleme konusunda sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Diğer HackTricks'i destekleme 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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||
* [**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
|
||||
* **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ı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
|
||||
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
HackTricks'ı desteklemenin diğer yolları:
|
||||
|
||||
|
@ -16,9 +16,17 @@ HackTricks'ı desteklemenin diğer yolları:
|
|||
|
||||
## Temel Bilgiler
|
||||
|
||||
Hızlı bin tek bağlantılı olduğundan diğer depolardan ç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ı 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](bins-and-memory-allocations.md)
|
||||
{% 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**.
|
||||
|
||||
Özetle:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```c
|
||||
ptr0 = malloc(0x20);
|
||||
ptr1 = malloc(0x20);
|
||||
|
@ -124,21 +132,24 @@ printf("Chunk 5: %p\t Contains: 0x%x\n", ptr5, (int)*ptr5);
|
|||
|
||||
printf("\n\nJust like that, we executed a fastbin attack to allocate an address to a stack variable using malloc!\n");
|
||||
}
|
||||
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Eğer global değişken **`global_max_fast`**'in değeri büyük bir sayıyla üzerine yazılabilirse, bu daha büyük boyutlarda fast bin oluşturmayı mümkün kılar, bu da önceden mümkün olmayan senaryolarda fast bin saldırıları gerçekleştirmeye olanak tanır.
|
||||
{% endhint %}
|
||||
|
||||
## Örnekler
|
||||
|
||||
* **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 bunlar serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile).
|
||||
* **Bilgi sızıntısı 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 konulmasını 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 örtüşme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları önlemek için araya başka bir parça serbest bırakılarak) aynı parçayı hızlı binde 2 kez elde etmek mümkündü. Sonra, tekrar tahsis edilebilir, bir sonraki parçanın adresini malloc\_hook'un biraz öncesine işaret edecek şekilde üzerine yazabilir (böylece malloc'un bir serbest boyut olduğunu düşündüğü bir tamsayıya işaret eder - başka bir atlatma), tekrar tahsis edebilir ve ardından malloc hook adreslerini alacak başka bir parça tahsis edebilir.\
|
||||
Sonunda bir **tek araç** oraya yazıldı.
|
||||
* Parçalar tahsis edilebilir, sonra serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (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).
|
||||
* **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.\
|
||||
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)**:**
|
||||
* 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 kullanıp 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 alacak şekilde olacaktır. Serbest bırakılan işaretçileri tekrar kullanabileceğiniz için bu adresi okuyun.
|
||||
* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı 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 etmesi için system'a işaret etmek üzere üzerine yazabiliriz ve ardından parça 1 `"/bin/sh"` yazabiliriz ve sonra `chunk1`'i serbest bırakabiliriz ki bu da `system("/bin/sh")`'yi çalıştıracaktır.
|
||||
|
||||
Hızlı Bin saldırısının bir örneklerini, bir sıralanmamış bin saldırısı aracılığıyla kötüye kullanıldığı örneklerde bulabilirsiniz:
|
||||
* 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.
|
||||
* **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.
|
||||
* 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.
|
||||
* Not 
|
||||
|
||||
{% content-ref url="unsorted-bin-attack.md" %}
|
||||
[unsorted-bin-attack.md](unsorted-bin-attack.md)
|
||||
|
@ -146,14 +157,14 @@ Hızlı Bin saldırısının bir örneklerini, bir sıralanmamış bin saldı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>
|
||||
<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>
|
||||
|
||||
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!
|
||||
* [**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) koleksiyonumuz
|
||||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin.
|
||||
* **Hacking hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katılın.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
|
||||
* **💬 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.**
|
||||
* **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>
|
||||
|
|
78
binary-exploitation/heap/large-bin-attack.md
Normal file
78
binary-exploitation/heap/large-bin-attack.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
# Büyük Kova Saldırısı
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</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 PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||
* [**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
|
||||
* **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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||
|
||||
</details>
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
Büyük kova 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](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Büyük kova saldırısına dair harika bir örnek [**how2heap - büyük kova saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) içinde bulunabilir.
|
||||
|
||||
Temelde burada, en son "güncel" glibc sürümünde (2.35), **`P->bk_nextsize`** kontrol edilmediği için belirli koşullar sağlandığında büyük bir kova parçasının değeri ile bir adresin değiştirilebileceğini görebilirsiniz.
|
||||
|
||||
Bu örnekte aşağıdaki koşulları bulabilirsiniz:
|
||||
|
||||
* Bir büyük parça ayrıldı
|
||||
* İlk parçadan daha küçük ancak aynı dizindeki bir büyük parça ayrıldı
|
||||
* Binde ilk sıraya gitmesi gerektiği için daha küçük olmalıdır
|
||||
* (Üst parçayla birleşmeyi önlemek için bir parça oluşturulur)
|
||||
* Ardından, ilk büyük parça serbest bırakılır ve ondan daha büyük yeni bir parça ayrılır -> Parça1 büyük kovaya gider
|
||||
* Ardından, ikinci büyük parça serbest bırakılır
|
||||
* Şimdi, zafiyet: Saldırgan `chunk1->bk_nextsize`'ı `[hedef-0x20]` olarak değiştirebilir
|
||||
* Ardından, 2. parçadan daha büyük bir parça ayrılır, bu nedenle parça2, adresi `chunk1->bk_nextsize->fd_nextsize`'ı parça2'nin adresi ile üzerine yazarak büyük kovaya eklenir
|
||||
|
||||
{% hint style="success" %}
|
||||
Diğer potansiyel senaryolar bulunmaktadır, önemli olan, büyük kovaya, bir mevcut X parçadan **daha küçük** bir parça eklemektir, bu nedenle binde X'ten hemen önce eklenmesi gerekmekte ve X'in **`bk_nextsize`**'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresinin yazılacağı yer burasıdır.
|
||||
{% endhint %}
|
||||
|
||||
Bu, malloc'tan ilgili kod parçalarıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```c
|
||||
/* if smaller than smallest, bypass loop below */
|
||||
assert (chunk_main_arena (bck->bk));
|
||||
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
|
||||
{
|
||||
fwd = bck; // fwd = p1
|
||||
bck = bck->bk; // bck = p1->bk
|
||||
|
||||
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
|
||||
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
|
||||
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
|
||||
}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Bu, daha sonra daha büyük parçalarla hızlı bir kutu saldırısını sömürmek için libc'in `global_max_fast` global değişkenini **üzerine yazmak için kullanılabilir**.
|
||||
|
||||
Bu saldırının başka harika bir açıklamasını [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html) adresinde bulabilirsiniz.
|
||||
|
||||
<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>
|
||||
|
||||
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 PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||
* [**The PEASS Family'yi**](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.**
|
||||
* **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>
|
29
binary-exploitation/heap/tcache-bin-attack.md
Normal file
29
binary-exploitation/heap/tcache-bin-attack.md
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Tcache Bin Saldırısı
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
|
||||
|
||||
HackTricks'ı 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
|
||||
* [**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.**
|
||||
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
|
||||
|
||||
</details>
|
||||
|
||||
## 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](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
İlk olarak, Tcache glibc sürümü 2.26'da tanıtıldı.
|
||||
|
||||
[**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) önerilen **Tcache** saldırısı, hedeflenen yerin bir serbest bırakılmış parçada içindeki bir sonraki parça işaretçisini isteğe bağlı bir adrese üzerine yazmak olduğu hızlı bin saldırısına çok benzer, böylece daha sonra **belirli bir 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(): unaligned tcache chunk detected`**. Bu nedenle, yeni işaretçiye yazılan adresin hizalanmış bir adres olması gerekmektedir (veya yazılan adresin aslında hizalandığından emin olmak için yeterince kez ikili dosyayı çalıştırmak gerekmektedir).
|
79
binary-exploitation/heap/unsorted-bin-attack.md
Normal file
79
binary-exploitation/heap/unsorted-bin-attack.md
Normal file
|
@ -0,0 +1,79 @@
|
|||
# Sıralanmamış Bin Saldırısı
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
|
||||
|
||||
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!
|
||||
* [**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
|
||||
* 💬 [**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 katkıda bulunun.
|
||||
|
||||
</details>
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
Sıralanmamış bir liste, bir parçanın `bk` adresindeki `unsorted_chunks (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçadaki `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.
|
||||
|
||||
Yani, temelde bu saldırı, bir saldırganın **bazı keyfi adresleri büyük bir sayıyla** (bir heap adresi veya bir libc adresi olabilecek bir adres) üzerine yazmasına izin verir, bu da sızdırmak isteyebileceği bir yığın adresi veya global değişken **`global_max_fast`** gibi bir kısıtlamayı geçmesine olanak tanır (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmesine izin verir).
|
||||
|
||||
{% 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'i kullanarak (tcaches'i önlemek için) **günümüzde** artık hata **`malloc(): unsorted double linked list corrupted`** tetiklenmektedir.
|
||||
|
||||
Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağ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.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Bu saldırının sıralanmamış bin'i bozduğunu (bu nedenle küçük ve büyük de) unutmayın. 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 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.
|
||||
{% 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 çıkar ve bu tekniği engeller: **`malloc(): unsorted double linked list corrupted`**
|
||||
|
||||
## 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)
|
||||
* Amacı, PIE etkin olmayan bir global değişkeni 4869'dan büyük bir değerle değiştirmektir, böylece bayrağı almak mümkün olur.
|
||||
* Keyfi boyutlarda parçalar oluşturulabilir ve istenilen boyutta bir heap taşması vardır.
|
||||
* Saldırı, taşmanın kötüye kullanılması için chunk0, taşmanın gerçekleşeceği chunk1 ve önceki parçaların birleştirilmesini önlemek için chunk2 oluşturularak başlar.
|
||||
* 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`
|
||||
* Daha sonra, 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.
|
||||
* [**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.
|
||||
* 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.
|
||||
* Daha sonra, **`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.
|
||||
* 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`'ın üzerine yazılmasında kullanılacaktır.
|
||||
* Daha sonra, kullanım hakkı olan dizin 2 (kullanımdan sonra serbest bırakılan işaretçi) ile edit işlevi çağrılır ve `bk` işaretçisinin `p64(global_max_fast-0x10)`'a işaret etmesi sağlanır. Ardından, yeni bir parça oluşturulduğunda önceki tehlikeye atıfta bulunan 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:
|
||||
* İ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 &__free_hook
|
||||
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
|
||||
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
|
||||
<strong>0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
|
||||
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
</code></pre>
|
||||
* Bu konumda 0x200 boyutunda hızlı bir parça almayı başarırsak, yürütülecek bir işaretçiyi üzerine yazmak mümkün olacaktır.
|
||||
* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirme işlevi iki kez bu işaretçiyle çağrılır, bu şekilde hızlı binde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçaya bir işaretçi elde edilir.
|
||||
* Ardından, bu parçada `fd` adresini önceki **`__free_hook`** işlevine işaret edecek şekilde değiştirmek için edit işlevi çağrılır.
|
||||
* Ardından, boyutu `0x1f8` olan bir parça oluşturulur ve hızlı binlerden önceki gereksiz parça alınır, böylece `0x1f8` boyutunda başka bir parça oluşturulur ve **`__free_hook`** içinde **`system`** fonksiyonunun adresi ile üzerine yazılır.
|
||||
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça, silme fonksiyonunu çağırarak serbest bırakılır, **`__free_hook`** fonksiyonunu tetikler ve bu fonksiyon `/bin/sh\x00` parametresi ile system fonksiyonuna işaret eder.
|
||||
|
||||
<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>
|
||||
|
||||
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!
|
||||
* [**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)
|
||||
* **💬 [**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.
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue