Directory Traversal Nedir?

Burak
3 min readNov 12, 2020

--

Bakalım portswigger nasıl bir açıklama yapıyor.

Dizin geçişi (dosya yolu geçişi olarak da bilinir), bir saldırganın, bir uygulamayı çalıştıran sunucuda rastgele dosyaları okumasına olanak tanıyan bir web güvenlik açığıdır. Bu, uygulama kodunu ve verilerini, arka uç sistemleri için kimlik bilgilerini ve hassas işletim sistemi dosyalarını içerebilir. Bazı durumlarda,bir saldırgan, sunucudaki rastgele dosyalara yazarak, uygulama verilerini veya davranışını değiştirmelerine ve nihayetinde sunucunun tam kontrolünü ele geçirmelerine olanak sağlayabilir.

Aslında gayet net bir açıklama ama biz örneklerle biraz daha netleştirelim.

Örnek bir atak

Diyelim ki bir alışveriş sitesi ürünlerin resimlerini kendi üzerinden statik olarak getiriyor. Gayet normal bir durum. Ya uzak bir kaynaktan alacaktı ya da kendi depolama alanından alacak. Ve istek de aşağıdaki şekilde gerçekleşiyor.

Request

filename adlı paratmetresi server tarafından 37.jpg adlı dosyayı getiriyor ve ekrana basıyor. Burda direk işletim sistemine giden bir komut var. Eğer bu parametereye ../../../../etc/passwd gibi bir değer girersek bakalım ne olur.

manipule edilmiş requsest

Evet web sitemiz bize direk girdiğimiz ifadeyi komut olarak algıladı ve çalıştırdı. Peki arkada nasıl nasıl bir olay var.

Önce ../../../../etc/passwd ifadesi ne anlama geliyor. unix ve ya linux tabanlı sistemlerde . ifadesi bulunduğumuz konumu ifade eder. Örneğin /home dizini altındaysak . yine bu konumu temsil eder. .. ifadesi ise bir geriye anlamı taşır bunun matığı da aşağıdaki görseli inceliyelim.

paint terk :)

. nokta .. noktanın çocuğu gibi bir anlam ve .. ifadesi ebeveyn gibi bir anlamı var. Neyse çok ayrıntıya girmeyelim. eğer cd (change directory) komutunu girer ve yanına .. koyarsam cd .. gibi sistem bir önceki directory’e gidecek.

arka arkada ../../../../ gibi ifadeler koymamın sebebi beni root (/) dizinine yani en üste götür demek. Çünkü hangi konumda olduğumu bilmiyorum. Hangi konumda olğumu bilmesem de /etc dizini altında yer alan passwd dosyasını okuyamam. Bu dosya da kısaca *nix tabanlı sistemlerde login detaylarını barındırır. kişinin adını şifresinin olduğunu yetkilerini home dizini gibi hassas ifadeleri bulundurur.

Büyük ihtimalle web uygulamamız şöyle yazılmış filename parameteresindeki ifadeyi yani değeri al ve direk ekrana bas. E bizde buraya en geriye git ve sonra /etc dizini altındaki passwd dosyasını getir diyoruz. İşte bu kadar basit :)

Peki nasıl önlenmeli?

Tabii ki filtreleme yapılacak. Değer direk getirilmeyecek. Önce bir resim dosyası ise resim olup olmadığı kontrol edilecek. Ve buna benzer birçok kontrol.

Evet bir yazımızın daha sonuna gelidik. Çok basit bir açık gibi görünebilir ama bulması zahmetli olabilir sonuçta paremetrelerin tek tek test edilme durumları var. Bu açık ciddi bilgilerin sızmasına sebep olabilir.

Hoşçakalın :)

--

--