Directory Traversal Zafiyeti Nedir Ve Nasıl İstismar Edilir?

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Akın Şengezer tarafından yazılmıştır.

[TR] Directory Traversal Zafiyeti Nedir Ve Nasıl İstismar Edilir?​


Merhabalar, ben Akın ŞENGEZER. Bu yazımda sizlere günümüz web sitelerinde karşılaştığımız Directory Traversal Zafiyeti Nedir Ve Hangi yöntemler ile sömürülür onu anlatacağım.

Keyifli Okumalar!

Directory Traversal (Dizin Geçişi) Nedir?​


Bir saldırganın hedef sunucu sisteminde rastgele dosyaları okumasına olanak tanıyan Web Güvenlik açığıdır. Bu zafiyet sistemdeki kimlik bilgileri ve hassas verilerin okunmasına izin tanır. Ve ya saldırgan bu zafiyeti sömürerek sisteme rastgele bir dosya yazar. Nihayetinde sistemi tam kontrol ele geçirmesine olanak sağlar.

directory-traversal

directory-traversal

Directory Traversal Zafiyeti Nasıl Sömürülür?​


İlk önce hedef sistemde “Manual Payload” denemeleri yapmalıyız. Bu sayede denemeler sayesinde sistemde zafiyet mevcut mu bunu görüntüleyebiliriz. Örnek olarak payloadlar;

index.php?id=../../../etc/passwd

../../../../../var/www


Bu zafiyette temel mantık aynı Linux Komut Satırında dizinlerden atlarken kullandığımız “../” komutunu web dizin geçişinde de kullanabildiğimiz bir zafiyettir.

https://some_site.com/index.php?id=/etc/passwd

https://some_site.com/get-files?file=../../../etc/shadow


Bu örnekler Directory Traversal zafiyetini kontrol edebileceğimiz örnek payloadlardır. Bu payloadları sizlerin aklına fikir oluşması için oluşturdum ki biraz sonra yapacağımız testlerde asıl mantığına temel atabilmek için.

dizin

Dizin

Directory Traversal Zafiyetini Nasıl Engelleriz?​


Zafiyeti önlemedeki en etkili yol, kullanıcı taraflı girdileri sistem dosyası API’lerine tamamen geçtirmekten kaçınmaktır.

  • Uygulama, kullanıcı girişini işlemeden önce doğrulamalıdır. İdeal olarak, doğrulama, izin verilen değerlerin beyaz listesiyle karşılaştırılmalıdır. Gerekli işlevsellik için bu mümkün değilse, doğrulama, girdinin yalnızca izin verilen içeriği, örneğin tamamen alfasayısal karakterler içerdiğini doğrulamalıdır.
  • Sağlanan girişi doğruladıktan sonra, uygulama girişi temel dizine eklemeli ve yolu standart hale getirmek için bir platform dosya sistemi API’sini kullanmalıdır.



Örnek Directory Traversal Zafiyet Çeşitleri Sömürme Aşaması​


Burada sizlerle “PortSwigger Academy” ‘nin bizlere sunduğu lab ortamlarında Directory Traversal zafiyet örneklerini inceleyip, bu zafiyetlerin nasıl istismar edildiğini gelin birlikte görelim.

https://portswigger.net/

Buradan sizler de Akademideki lablara erişip alıştırmalar yapabilirsiniz.

3 Tane Zafiyet Örneği İnceleyeceğiz. Gelin başlayalım…



1-)File Path Traversal​

Lab1

Lab1

Lab’da bizden “Ürün Resimlerinin Görüntülenmesi” üzerine Dizin Geçişi Zafiyeti olduğunu ve bunu bulmamızı istiyor. Aşağı kısımda ise /etc/passwd dosyasının içeriğini almamızı istiyor.

Lab1

Lab1

Yukarıda, yazının başında ilk bahsettiğim temel payloadlardan olan “../” bu saldırı türünde kullandık ve “Directory Traversal” zafiyetini bu sayede bulup, /etc/passwd dosya içeriğini okumuş olduk.

2-)Traversal sequences blocked with absolute path bypass​


Buradaki Lab’da bizden tekrar bir Dizin Geçişi Zafiyetini sömürmemizi istiyor. Fakat farkı önceki Lab’dan, bu sefer bizden sağlanan dosya adını varsayılan bir çalışma dizinine göreli olarak değerlendirdiğini ve payloadımızın ona göre yazılması gerektiğini söyler. Yani bizden önceki Lab’da filename= parametresinden sonra default olarak “../” kullanmadan görüntüleyebileceğimizi söylüyor.

Lab2

Lab2

Sitemizi dinlemeye aldıktan sonra istek düştüğü zaman “Forward” edip “filename=” parametresi olan web sayfasına getiriyoruz. İstek geldikten sonra “Repeater” kısmına yollayıp kendi isteklerimizi orada kontrol etmeye yolluyoruz. Bu sefer “filename=” parametresinden sonra “../” kullanmadan, direkt “/etc/passwd” yazarak dosya içeriğini okumaya çalışıyoruz ve bize Lab’ın çözüldüğünü bildiriyor.

Lab2

Lab2

“filename=” parametresinden sonra görüldüğü gibi sadece /etc/passwd yazıp istek göndererek dosya içeriğini okumuş olduk.

Lab2

Lab2



3-)Validation of file extension with null byte bypass​


Bu sefer ki yöntemimiz ise bizden tekrar “Dizin Geçişi” zafiyetini sömürmemiz gerektiği fakat bu sefer de, boş bayt atlayarak (%) dosya uzantısını png halde /etc/passwd dosya içeriğini okumamız isteniyor. Şimdi Lab’ı çözerken daha iyi anlayacağınıza eminim.

Bildiğiniz üzere boşluk bırakma yani Space Url adreslerinde vb… (%) olarak kodlanır. Bizden aslında normal “../” parametresi ile /etc/passwd dosya içeriği okumamız isteniyor ama hem (%) bypass yöntemini hem de png bypass yöntemi ile okunmasını istiyor.

Lab3

Lab3

Sitemizi dinlemeye aldıktan sonra istek düştüğü zaman “Forward” edip “filename=” parametresi olan web sayfasına getiriyoruz. İstek geldikten sonra “Repeater” kısmına yollayıp kendi isteklerimizi orada kontrol etmeye yolluyoruz. “filename=” parametresinden sonra

Payload: ../../../etc/passwd%00.png

Yukarıdaki payload örneği bizden istenen örnek. Klasik “../” parametrelerini kullandıktan sonra okumak istediğimiz dosya içeriğini yazıyoruz. Fakat isteği bu şekilde gönderirseniz sistem bunu Blacklist’e aldığı için herhangi bir Response dönmeyecektir. Biz bu Koruma Önlemini yıkmak için Bypass tekniklerini Payloadımız’da kullandık. % bize boşluk bıraktırıp .png ise istenen parametreyi sağladıktan sonra Bypass edilip sistem dosya içeriği okuduk. (/etc/passwd)

Simple

Simple

Belirtilen yerde Response isteği sanki normalmiş gibi gösterdi. Ama kullandığımız Bypass Teknikleri ile aslında arka planda bu isteği Suistimal edip kendi yazdığımız payload’a dönüştürdük ki sistem bizi yakalayıp Blacklist’e almaması için.

Simplee

Simple



Lab3

Lab3

Yukarıda da görüldüğü üzere yazdığımız Payload ile sistem dosya içeriğini okuyup son Lab örneğini de çözmüş bulunduk.

Umarım yararlı bir yazı olmuştur sizler içinde. Keyifli Okumalar ve İyi Günler Dilerim.
 
Moderatör tarafında düzenlendi:
Geri
Üst