hacktricks/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md

75 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WWW2Exec - \_\_malloc\_hook & \_\_free\_hook
<details>
<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>
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 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öndererek paylaşın.**
</details>
## **Malloc Hook**
[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 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:
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
{% endcontent-ref %}
{% hint style="warning" %}
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 &#x26;__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 &#x3C;__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
<strong>0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f &#x3C;_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)
* [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).
<details>
<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>
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 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öndererek paylaşın.**
</details>