Akın Şengezer tarafından yazılmıştır.
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!
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
İ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
Zafiyeti önlemedeki en etkili yol, kullanıcı taraflı girdileri sistem dosyası API’lerine tamamen geçtirmekten kaçınmaktır.
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…
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
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.
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
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
“filename=” parametresinden sonra görüldüğü gibi sadece /etc/passwd yazıp istek göndererek dosya içeriğini okumuş olduk.
Lab2
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
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
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.
Simple
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.
[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 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
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
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
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
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
“filename=” parametresinden sonra görüldüğü gibi sadece /etc/passwd yazıp istek göndererek dosya içeriğini okumuş olduk.
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
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
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.
Simple
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: