mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
87 lines
5.5 KiB
Markdown
87 lines
5.5 KiB
Markdown
# Büyük Bin Saldırısı
|
||
|
||
{% hint style="success" %}
|
||
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>HackTricks'i Destekleyin</summary>
|
||
|
||
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın 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ı paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## Temel Bilgiler
|
||
|
||
Bir büyük binin ne olduğu 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 %}
|
||
|
||
[**how2heap - büyük bin saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) sayfasında harika bir örnek 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 bin 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 tahsis edilir
|
||
* İlk parçadan daha küçük ancak aynı dizindeki bir büyük parça tahsis edilir
|
||
* 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 tahsis edilir -> Parça1 büyük bine 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, chunk 2'den daha büyük bir parça tahsis edilir, bu nedenle chunk2, adresi `chunk1->bk_nextsize->fd_nextsize`'ı chunk2'nin adresi ile üzerine yazarak büyük bine eklenir
|
||
|
||
{% hint style="success" %}
|
||
Diğer potansiyel senaryolar bulunmaktadır, önemli olan, büyük bine, 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 büyük parçalarla hızlı bin 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.
|
||
|
||
### Diğer örnekler
|
||
|
||
* [**La casa de papel. HackOn CTF 2024**](https://7rocky.github.io/en/ctf/other/hackon-ctf/la-casa-de-papel/)
|
||
* Aynı durumda büyük bin saldırısı [**how2heap**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) adresinde göründüğü gibi.
|
||
* Yazma ilkesi daha karmaşıktır, çünkü burada `global_max_fast` işe yaramaz.
|
||
* Sömürüyü bitirmek için FSOP gereklidir.
|
||
|
||
{% hint style="success" %}
|
||
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>HackTricks'i Destekleyin</summary>
|
||
|
||
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın 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ı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||
|
||
</details>
|
||
{% endhint %}
|