WWW2Exec - GOT/PLT
Last updated
Last updated
AWS Hacking'ı öğrenin ve uygulayın: HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'ı öğrenin ve uygulayın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Global Offset Table (GOT), dinamik olarak bağlanmış ikili dosyalarda harici işlevlerin adreslerini yönetmek için kullanılan bir mekanizmadır. Bu adresler çalışma zamanında bilinmediği için (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin çözüldükten sonra bu adresleri dinamik olarak güncellemek için bir yol sağlar.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir işlev ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır. Aynı işlevin sonraki çağrıları, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme gereksiniminden kaçınılır.
Procedure Linkage Table (PLT), GOT ile yakından çalışır ve harici işlevlere yapılan çağrıları işlemek için bir trambolin görevi görür. Bir ikili bir harici işlevi ilk kez çağırdığında, kontrol, o işlevle ilişkili PLT girişine geçer. Bu PLT girişi, işlevin adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmemişse. Adres çözüldükten sonra, GOT'ta depolanır.
Bu nedenle, harici bir işlevin veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. PLT girişleri, bu adreslerin başlangıçta çözülmesini dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır.
objdump -s -j .got ./exec
komutu ile GOT tablosunun adresini alın.
GEF ile yürütülebilir dosyayı yükledikten sonra GOT'ta bulunan işlevleri görebilirsiniz: gef➤ x/20x 0xADDR_GOT
GEF kullanarak hata ayıklama oturumu başlatabilir ve GOT tablosunu görmek için got
komutunu çalıştırabilirsiniz:
Bir ikili dosyada GOT, işlevlerin adreslerine veya işlev adresini yükleyecek olan PLT bölümüne sahiptir. Bu keyfi yazma işleminin amacı, daha sonra system
işlevinin PLT'sinin adresiyle değiştirilecek bir işlevin GOT girişini geçersiz kılmaktır.
İdeal olarak, kontrolünü sağladığınız parametrelerle çağrılacak bir işlevin GOT'unu geçersiz kılacaksınız (bu sayede sistem işlevine gönderilen parametreleri kontrol edebileceksiniz).
Eğer ikili tarafından system
kullanılmıyorsa, sistem işlevinin PLT'de bir girişi olmayacak. Bu senaryoda, önce system
işlevinin adresini sızdırmanız ve ardından GOT'u bu adrese işaretleyecek şekilde üzerine yazmanız gerekecektir.
PLT adreslerini objdump -j .plt -d ./vuln_binary
komutu ile görebilirsiniz.
Libc GOT'un partial RELRO ile derlenmesi genellikle mümkünse adresini bulmak için güzel bir hedef oluşturur (ASLR).
Libc'nin yaygın işlevleri, başka dahili işlevleri çağıracaklar ve bu işlevlerin GOT'u geçersiz kılınarak kod yürütme elde edilebilir.
Bu tekniğe ilişkin daha fazla bilgiyi burada bulabilirsiniz.
Heap istismarı CTF'lerinde genellikle parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek mümkündür. Eğer bir gadget mevcut değilse RCE elde etmek için basit bir hile, free
GOT adresini system
'e işaret etmek ve bir parçaya "/bin/sh"
yazmaktır. Bu şekilde bu parça serbest bırakıldığında system("/bin/sh")
çalıştırılacaktır.
Başka yaygın bir teknik, strlen
GOT adresini system
'e işaret etmektir, böylece bu işlev kullanıcı girdisiyle çağrıldığında "/bin/sh"
dizesini geçmek ve bir kabuk almak mümkün olacaktır.
Ayrıca, eğer puts
kullanıcı girdisiyle kullanılıyorsa, strlen
GOT adresini system
'e işaret etmek ve dize "/bin/sh"
'yi geçmek mümkün olacaktır çünkü puts
, kullanıcı girdisiyle strlen
'i çağıracaktır.
Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanmak ve GOT tablosunun bir kısmını hızlı bin içine eklemek, böylece o parça tahsis edildiğinde genellikle free
işlevinin işaretçisini üzerine yazmak mümkün olacaktır.
Ardından, free
'yi system
'e işaret etmek ve /bin/sh\x00
yazılmış bir parçayı serbest bırakmak, bir kabuk yürütmek mümkün olacaktır.
Bir örneği burada bulabilirsiniz.
Tam RELRO koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından GOT tablosunu salt okunur hale getirerek bu tür tekniklere karşı koruma sağlamayı amaçlar:
Relro