House of Force
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bu teknik yamanmıştır (burada) ve bu hatayı üretir: malloc(): corrupted top size
İsterseniz bunu test etmek için kod buradan deneyebilirsiniz.
Bu saldırının hedefi, belirli bir adreste bir parça ayırabilmektir.
Üst parça başlığının boyutunu (örneğin -1) yazmayı sağlayan bir taşma.
Yığın tahsisi boyutunu kontrol edebilmek.
Eğer bir saldırgan, burada bir değeri yazmak için P adresinde bir parça ayırmak istiyorsa, üst parça boyutunu -1
ile (belki bir taşma ile) yazmaya başlar. Bu, malloc'un herhangi bir tahsis için mmap kullanmayacağından emin olur çünkü Üst parça her zaman yeterli alana sahip olacaktır.
Sonra, üst parçanın adresi ile tahsis edilecek hedef alan arasındaki mesafeyi hesaplayın. Bunun nedeni, o boyutta bir malloc'un, üst parçayı o konuma taşımak için yapılacak olmasıdır. Fark/boyutun nasıl kolayca hesaplanabileceği şöyle:
Bu nedenle, target - old_top - 4*sizeof(long)
boyutunda bir alan ayırmak (4 long, üst parça ve yeni parça için meta veriler nedeniyle) üst parçayı yazmak istediğimiz adrese taşıyacaktır.
Sonra, hedef adreste bir parça almak için başka bir malloc yapın.
Bu senaryonun amacı, ret2win fonksiyonunun adresi tarafından çağrılacak bir fonksiyonun adresini değiştirmektir.
İkili dosyada, üst parça boyutunu değiştirmek için istismar edilebilecek bir taşma vardır; bu, -1 veya p64(0xffffffffffffffff) olarak değiştirilir.
Sonra, yazılacak yerin adresi hesaplanır ve üst parçanın mevcut konumundan oraya olan fark malloc
ile ayrılır.
Son olarak, içinde bu istenen hedefi barındıracak yeni bir parça ayrılır; bu, ret2win fonksiyonu tarafından üzerine yazılır.
Input your name:
kısmında, heap'ten bir adres sızdırmaya izin veren bir başlangıç zafiyeti vardır.
Sonra Org:
ve Host:
işlevselliğinde, org adı istendiğinde s
işaretçisinin 64B'sini doldurmak mümkündür; bu, yığında v2'nin adresinden sonra gelir ve ardından belirtilen host adı gelir. Sonrasında, strcpy s
'nin içeriğini 64B boyutundaki bir parçaya kopyalayacağı için, host adı içine yerleştirilen verilerle üst parçanın boyutunu üzerine yazmak mümkündür.
Artık keyfi yazma mümkün olduğuna göre, atoi
'nin GOT'u printf'in adresi ile üzerine yazıldı. Bu sayede %24$p
ile IO_2_1_stderr
adresi sızdırılabildi. Ve bu libc sızıntısı ile atoi
'nin GOT'u tekrar system
adresi ile üzerine yazıldı ve parametre olarak /bin/sh
geçildi.
Bu diğer yazıda önerilen alternatif bir yöntem, free
'yi puts
ile üzerine yazmak ve sonra 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
'u system
ile üzerine yazmak ve /bin/sh
ile çağırmak mümkündür.
Temizlenmemiş bir işaretçi ile serbest bırakılmış bir parçayı yeniden kullanmaya izin veren bir UAF vardır. Bazı okuma yöntemleri nedeniyle, burada free fonksiyonuna bir işaretçi yazarak bir libc adresi sızdırmak mümkündür ve ardından okuma fonksiyonu çağrılır.
Sonra, UAF'yi istismar ederek, kalan alanın boyutunu -1 ile üzerine yazmak, serbest bırakma kancası için yeterince büyük bir parça ayırmak ve ardından serbest bırakma kancasını içerecek başka bir parça ayırmak için House of force kullanıldı. Ardından, kancaya system
adresini yazın, bir parçaya "/bin/sh"
yazın ve son olarak bu dize içeriği ile parçayı serbest bırakın.
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)