PIE
Temel Bilgiler
PIE olarak derlenen bir ikili dosya, yani Pozisyon Bağımsız Yürütülebilir, programın her çalıştırıldığında farklı bellek konumlarına yüklenebileceği anlamına gelir, sabitlenmiş adresleri önler.
Bu ikili dosyaları sömürmek için hile, göreceli adresleri sömürmekte yatar - programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. PIE'yi atlatmak için sadece bir adres sızdırmanız yeterlidir, genellikle yığın kullanarak format dizesi saldırıları gibi zafiyetlerden yararlanılır. Bir adres elde ettikten sonra, diğerlerini sabit ofsetlerine göre hesaplayabilirsiniz.
PIE ikili dosyaları sömürmek için faydalı bir ipucu, temel adreslerinin genellikle 000 ile bittiğidır, çünkü bellek sayfaları rastgeleleştirme birimleri olup 0x1000 bayt büyüklüğündedir. Bu hizalama, bir saldırının beklenildiği gibi çalışmadığını gösteren kritik bir kontrol olabilir, doğru temel adresin belirlenip belirlenmediğini gösterir.
Veya bu hizalamayı saldırınızda kullanabilirsiniz, bir adresin 0x649e1024
konumunda olduğunu sızdırdığınızda, temel adresin 0x649e1000
olduğunu bilirsiniz ve oradan sadece fonksiyonların ve konumların ofsetlerini hesaplayabilirsiniz.
Atlatmalar
PIE'yi atlatmak için yüklenen ikili dosyanın bazı adreslerini sızdırmanız gerekmektedir, bunun için bazı seçenekler bulunmaktadır:
ASLR devre dışı bırakılmışsa: ASLR devre dışı bırakılmışsa, PIE ile derlenmiş bir ikili dosya her zaman aynı adreste yüklenecektir, bu nedenle PIE işe yaramaz çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
Sızıntıyı verilmiş almak (kolay CTF zorluklarında yaygındır, bu örneği kontrol edin)
Yığında doğru olanları sızdırana kadar EBP ve EIP değerlerini brute-force etmek:
Yığında bir adresi sızdırmak için format dizesi gibi bir keyfi okuma zafiyetini kullanarak ikili dosyanın bir adresini sızdırın (örneğin, önceki teknikte olduğu gibi yığından) ve ikilinin temelini alın ve oradan ofsetleri kullanın. Bir örnek bulun.
Referanslar
Last updated