hacktricks/binary-exploitation/array-indexing.md

4.2 KiB
Raw Blame History

Dizi İndeksleme

Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli verilerin üzerine yazılabilmesine olanak tanıyan tüm zayıflıkları içerir. Saldırı mekanizması tamamen zayıflığın koşullarına bağlı olduğundan belirli bir metodolojiye sahip değildir.

Ancak burada bazı güzel örnekler bulabilirsiniz:

  • https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html
  • Verilerin depolandığı adresler için bir tane ve o verilerin boyutları için bir tane olmak üzere 2 çakışan dizi bulunmaktadır. Birinden diğerine üzerine yazma yapmak mümkündür, bu da rastgele bir adresi boyut olarak belirterek yazmayı sağlar. Bu, GOT tablosundaki free fonksiyonunun adresini yazmayı ve ardından onu system adresiyle üzerine yazmayı ve hafızadan /bin/sh ile çağırmayı mümkün kılar.
  • https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html
  • 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe sıralanacağı bir tür tampon taşmasını elde etmek mümkündür, bu nedenle bu gereksinimi karşılayan bir kabuk kodu oluşturmak gereklidir. Ayrıca, canary'nin konumundan hareket ettirilmemesi gerektiğini ve son olarak RIP'nin bir ret adresiyle üzerine yazılması gerektiğini ve bu gereksinimleri karşılayan ve yığının başlangıcına işaret eden yeni bir adresin en büyük adresi eklenmesi gerektiğini unutmamak gerekir (program tarafından sızdırılan). Bu şekilde ret'in oraya atlaması mümkün olacaktır.
  • https://faraz.faith/2019-10-20-secconctf-2019-sum/
  • 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve bu işaretçi, dizideki fazla olan bir hata tarafından üzerine yazılan adreslerin toplamını yazmaktadır. Yığın kontrol edilir, bu nedenle GOT exit adresi pop rdi; ret ile üzerine yazılır ve yığında main adresi eklenir (main'e geri dönüş yapılır). Ardından, puts kullanarak GOT'taki adresin sızdırılması için bir ROP zinciri kullanılır (exit çağrılacak, bu nedenle pop rdi; ret çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
  • https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
  • 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak mümkündür. Tampon taşmasını kötüye kullanarak system('/bin/sh') çağrısı yapmak için ret2lib kullanılır (bir kontrolü atlatmak için yığın adresine ihtiyaç vardır).