6.9 KiB
Force Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- 💬 Discord grubuna katılın veya telegram grubuna katılın veya bizi Twitter 🐦 @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.
Temel Bilgiler
Kod
- Bu teknik düzeltildi (burada) ve şu hatayı üretir:
malloc(): corrupted top size
- Test etmek isterseniz buradan kodu deneyebilirsiniz.
Amaç
- Bu saldırının amacı belirli bir adreste bir parça tahsis edebilmektir.
Gereksinimler
- Başlık üst parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin -1).
- Yığın tahsis boyutunu kontrol edebilme yeteneği
Saldırı
Bir saldırgan, bir değeri buraya yazmak için bir parça tahsis etmek isterse, işe -1
ile başlık üst parçasını üzerine yazarak başlar (belki bir taşma ile). Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar.
Ardından, başlık üst parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, başlık üst parçasını o konuma taşımak için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/mesafe kolayca hesaplanabilir. Bu, farkın/boyutun nasıl kolayca hesaplanabileceğidir:
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/
Bu nedenle, hedef - eski_üst - 4*sizeof(long)
boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.
Ardından, hedef adreste bir parça almak için başka bir malloc yapın.
Referanslar ve Diğer Örnekler
- https://github.com/shellphish/how2heap/tree/master
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/
- https://heap-exploitation.dhavalkapil.com/attacks/house_of_force
- https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c
- https://guyinatuxedo.github.io/41-house_of_force/house_force_exp/index.html
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/#hitcon-training-lab-11
- Bu senaryonun amacı, çağrılacak bir işlevin adresini ret2win işlevinin adresine değiştirmemiz gereken bir ret2win'dir
- İkili dosyanın, üst parçanın boyutunu değiştirmek için kötüye kullanılabilecek bir taşma sorunu vardır, bu da -1 veya p64(0xffffffffffffffff) olarak değiştirilir
- Daha sonra, üzerine yazılacak işaretçinin bulunduğu yere giden adres hesaplanır ve üst parçanın mevcut konumundan oraya olan fark
malloc
ile ayrılır - Son olarak, istenen hedefi içerecek yeni bir parça ayrılır ve bu parça ret2win işlevi tarafından üzerine yazılır
- https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp
Adınızı girin:
alanında, yığından bir adres sızdırmaya izin veren başlangıçta bir zayıflık vardır- Ardından,
Org:
veHost:
işlevlerinde, org adı istendiğindes
işaretçisinin 64B'sini doldurmak mümkündür, bu da yığında v2 adresini takip eden ve daha sonra belirtilen ana bilgisayar adını takip eden verileri kopyalayacak olan strcpy'nin içeriğini üst parçanın boyutunu üzerine yazmak mümkündür. - Artık keyfi yazma mümkün olduğundan,
atoi
'nin GOT'u printf adresine üzerine yazılmıştır. Ardından,IO_2_1_stderr
adresi%24$p
ile sızdırılabildi ve bu libc sızıntısı ileatoi
'nin GOT'u tekrarsystem
adresiyle üzerine yazılarak/bin/sh
parametresiyle çağrılabildi - Bu diğer yazıda önerilen alternatif bir yöntem,
free
'yiputs
ile üzerine yazmak ve ardından daha sonra serbest bırakılacak işaretçiyeatoi@got
adresini eklemektir, böylece sızdırılır ve bu sızıntı ile tekraratoi@got
adresisystem
ile üzerine yazılır ve/bin/sh
ile çağrılır. - https://guyinatuxedo.github.io/41-house_of_force/bkp16_cookbook/index.html
- Serbest bırakılan ancak işaretçi temizlenmeden tekrar kullanılmasına izin veren bir UAF vardır. Bazı okuma yöntemleri olduğundan, burada GOT'a serbest işlevine bir işaretçi yazarak bir libc adresi sızdırmak ve ardından okuma işlevini çağırmak mümkündür.
- Ardından, (UAF'yi kötüye kullanarak) sol boşluğun boyutu -1 ile üzerine yazılarak House of force kullanıldı, serbest kancaya ulaşmak için yeterince büyük bir parça ayrıldı ve ardından serbest kancayı içerecek başka bir parça ayrıldı. Ardından, kancaya
system
adresi yazılır, bir parçaya"/bin/sh"
yazılır ve son olarak bu dize içeriğine sahip parça serbest bırakılır.