6.3 KiB
AW2Exec - GOT/PLT
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
GOT: Global Offset Table
Global Offset Table (GOT), dinamik olarak bağlantılı ikili dosyalarda harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır. Bu adresler çalışma zamanında (dinamik bağlantı nedeniyle) bilinmediğinden, GOT, bu harici sembollerin adreslerini dinamik olarak güncellemenin bir yolunu sağlar.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir fonksiyon ilk kez çağrıldığında, gerçek adresi dinamik bağlayıcı tarafından çözülür ve GOT'a kaydedilir. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta saklanan adresi kullanır ve böylece adresin tekrar çözülmesi için gereken yükten kaçınılır.
PLT: Procedure Linkage Table
Procedure Linkage Table (PLT), GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları yönetmek için bir trampolin görevi görür. Bir ikili dosya ilk kez bir harici fonksiyonu çağırdığında, kontrol o fonksiyonla ilişkili PLT'deki bir girişe geçer. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur, eğer bu adres daha önce çözülmemişse. Adres çözüldükten sonra, GOT'a kaydedilir.
Bu nedenle, GOT girişleri, bir harici fonksiyon veya değişkenin adresi çözüldüğünde doğrudan kullanılır. PLT girişleri, bu adreslerin dinamik bağlayıcı aracılığıyla ilk çözümlemesini kolaylaştırmak için kullanılır.
İcra Alma
GOT'u Kontrol Et
GOT tablosunun adresini almak için: objdump -s -j .got ./exec
GEF'de yürütülebilir dosyayı yükledikten sonra GOT'taki fonksiyonları görebileceğinizi gözlemleyin: gef➤ x/20x 0xADDR_GOT
GEF kullanarak bir hata ayıklama oturumu başlatabilir ve GOT tablosunu görmek için got
komutunu çalıştırabilirsiniz:
GOT2Exec
Bir ikili dosyada GOT, fonksiyonların adreslerini veya PLT bölümüne yükleyecek olan fonksiyon adreslerini içerir. Bu keyfi yazmanın amacı, daha sonra çalıştırılacak bir fonksiyonun GOT girişini system
fonksiyonunun PLT adresiyle örneğin geçersiz kılmaktır.
İdeal olarak, kontrol ettiğiniz parametrelerle çağrılacak bir fonksiyonun GOT'unu geçersiz kılacaksınız (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
Eğer system
script tarafından kullanılmıyorsa, sistem fonksiyonu PLT'de bir girişe sahip olmayacaktır. Bu senaryoda, önce system
fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese işaret edecek şekilde geçersiz kılmanız gerekecektir.
PLT adreslerini objdump -j .plt -d ./vuln_binary
ile görebilirsiniz.
One Gadget
{% content-ref url="../one-gadget.md" %} one-gadget.md {% endcontent-ref %}
Koruma
Full RELRO koruması, ikili dosya başlatıldığında fonksiyonların tüm adreslerini çözerek ve sonrasında GOT tablosunu yalnızca okunur hale getirerek bu tür tekniklere karşı koruma sağlamayı amaçlar:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} relro.md {% endcontent-ref %}
Referanslar
- https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.