Ders 5.49: Paylaşımlı kitaplık ele geçirme
Bir program nadiren yalnız çalışır: dinamik yükleyici paylaşımlı kitaplıklarını bir dizin listesini arayarak bulur ve ilk eşleşen dizine yazabilen kişi onun içinde hangi kodun çalışacağına karar verir. Bir ikilinin RUNPATH'inde kalmış derleme yolları ve /etc/ld.so.conf.d içindeki yazılabilir dizinler iki klasik giriş yoludur; program root olarak çalışıyorsa yerleştirilen kitaplık da root olarak çalışır. Laboratuvarda root'un çalıştırdığı gecelik bir rapor /tmp'den bir kitaplık alıyor. Arama yolunu readelf ile okuyor, çözümlemeyi ldd ile görüyor, yerleştirilmiş kopyayı kanıt olarak saklıyor, açığı kapatıyor ve sistem genelindeki yükleyici yapılandırmasında ikinci bir açığı düzeltiyorsun.
18 dk
Bu derste öğreneceklerin
- Dinamik yükleyicinin arama sırasını açıklamak
- readelf -d ile NEEDED ve RUNPATH girdilerini okumak
- ldd ile her kitaplığın hangi dosyaya çözüldüğünü görmek
- RUNPATH ve ld.so.conf.d içindeki yazılabilir dizinleri tanımak
- Ele geçirmeyi kaldırmak ve yükleyici önbelleğini ldconfig ile yeniden kurmak
Temel terimler
- Dinamik yükleyici
- ld.so: main() çalışmadan önce bir programın paylaşımlı kitaplıklarını bulur ve yükler.
- NEEDED
- İkilinin gerektirdiği, dinamik bölümüne kaydedilmiş kitaplık adı.
- RUNPATH / RPATH
- İkiliye gömülü, yükleyicinin aradığı dizinler; RUNPATH LD_LIBRARY_PATH'ten sonra, eski RPATH ondan önce gelir.
- ld.so.cache
- Yükleyicinin sistem kitaplıkları dizini; ldconfig tarafından /etc/ld.so.conf.d'den kurulur.
- Kitaplık ele geçirme
- Kötü amaçlı bir kitaplığı yükleyicinin önce bulacağı yere koymak.
← Sağlam kabuk betikleri: güvenle başarısız ol · Tüm dersler · Sürekli uyumluluk: zamanlanmış taramalar ve kayma →