PIE

Reading time: 3 minutes

tip

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) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

PIE olarak derlenmiş bir ikili, veya Position Independent Executable, programın her çalıştırıldığında farklı bellek konumlarında yüklenebileceği anlamına gelir, bu da sabit adreslerin önüne geçer.

Bu ikilileri istismar etmenin püf noktası, göreceli adresleri istismar etmektir—programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. PIE'yi atlatmak için, yalnızca bir adres sızdırmanız gerekir, genellikle stack'ten format string saldırıları gibi zafiyetler kullanarak. Bir adres elde ettiğinizde, diğerlerini sabit ofsetleri ile hesaplayabilirsiniz.

PIE ikililerini istismar etmede yardımcı bir ipucu, temel adreslerinin genellikle 000 ile bitmesidir çünkü bellek sayfaları rastgeleleştirme birimleri olarak 0x1000 bayt boyutundadır. Bu hizalama, bir istismar beklenildiği gibi çalışmıyorsa kontrol edilmesi gereken kritik bir durumdur, doğru temel adresin tanımlanıp tanımlanmadığını gösterir.
Ya da bunu istismarınız için kullanabilirsiniz, eğer bir adresin 0x649e1024 konumunda olduğunu sızdırırsanız, temel adresin 0x649e1000 olduğunu bilirsiniz ve buradan sadece fonksiyonların ve konumların ofsetlerini hesaplayabilirsiniz.

Atlatmalar

PIE'yi atlatmak için, yüklenen ikilinin bazı adreslerini sızdırmak gereklidir, bunun için bazı seçenekler vardır:

  • ASLR devre dışı: Eğer ASLR devre dışı bırakılmışsa, PIE ile derlenmiş bir ikili her zaman aynı adreste yüklenecektir, bu nedenle PIE işe yaramayacaktır çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
  • Sızdırma verilmesi (kolay CTF zorluklarında yaygındır, bu örneğe bakın)
  • Doğru olanları sızdırana kadar stack'teki EBP ve EIP değerlerini brute-force ile denemek:

BF Addresses in the Stack

  • Bir keyfi okuma zafiyetini kullanarak format string gibi, ikilinin bir adresini sızdırmak (örneğin, önceki teknik gibi stack'ten) için temel adresi elde etmek ve buradan ofsetleri kullanmak. Burada bir örnek bulun.

Referanslar

tip

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) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin