House of Force
Last updated
Last updated
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)
Bu teknik düzeltildi (burada) ve şu hatayı üretir: malloc(): corrupted top size
Test etmek isterseniz buradan kodu deneyebilirsiniz.
Bu saldırının amacı belirli bir adreste bir parça tahsis edebilmektir.
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
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:
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.
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
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:
ve Host:
işlevlerinde, org adı istendiğinde s
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ı ile atoi
'nin GOT'u tekrar system
adresiyle üzerine yazılarak /bin/sh
parametresiyle çağrılabildi
Bu diğer yazıda önerilen alternatif bir yöntem, free
'yi puts
ile üzerine yazmak ve ardından daha sonra serbest bırakılacak işaretçiye atoi@got
adresini eklemektir, böylece sızdırılır ve bu sızıntı ile tekrar atoi@got
adresi system
ile üzerine yazılır ve /bin/sh
ile çağrılır.
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.