PORTSWIGGER WEB SECURITY - DIRECTORY TRAVERSAL LAB ÇÖZÜMLERİ

2 years ago 110
BOOK THIS SPACE FOR AD
ARTICLE AD

Directory Traversal (Dizin-Dosya Geçişi), saldırganların bir web sunucusundaki kısıtlı dizinlere erişmesine ve web sunucusunun kök dizini dışında komutlar çalıştırmasına olanak tanıyan bir web güvenliği zafiyetidir. Web sunucusu, uygulama kodlarını ve verilerini, arka planda yer alan kimlik bilgilerini ve hassas işletim sistemi dosyalarını içerebilir. Saldırgan bazı durumlarda sunucudaki herhangi bir dosyaya yazabilir, uygulama verilerini değiştirebilir ve sunucuda tam yetki sahibi olabilir.

Bu çalışmada bahsedilen Directory Traversal zafiyeti için tüm laboratuvar çözümleri ele alınmıştır. Keyifli okumalar..

Bu web sayfasını, satılık ürünlerin görsellerini görüntüleyen bir alışveriş uygulaması olarak düşünelim. Ürün görselleri aşağıdaki gibi bir HTML scripti aracılığıyla görüntülenmektedir.

<img src=”/loadImage?filename=36.png”>

Web sunucusunda görseller /var/www/images dizininde tutulmaktadır. Url üzerinden https://insecure-website.com/loadImage?filename=36.png şeklinde bir istekte bulunup 36.png adlı dosyayı görüntülemek istediğimizde, web uygulaması dosyayı /var/www/images/36.png dosya yolundan okuyacaktır.

Görsellerin tutulduğu konum burada bilgi niteliğindedir normalde saldırgan dosyanın konumunu bilemez. Dolayısıyla saldırganın görüntülemek istediği dosya için kaç dizin geriye gidileceği deneme yanılma yoluyla bulunabilmektedir.

Uygulama directory traversal saldırılarına karşı savunmasız ise, saldırgan sunucunun dosya sisteminden rastgele bir dosya çekmek için 36.png dosyası yerine ../../../etc/passwd komut satırıyla, URL’i https://insecure-website.com/loadImage?filename=../../../etc/passwd şeklinde send edebilir ve /etc/passwd dosyasını okuyabilir.

Unix tabanlı işletim sistemlerinde ../ dizisi, Windows işletim sisteminde ..\ ve ../ dizileri bir üst dizine geçmeyi temsil etmektedir. Saldırgan Windows işletim sistemi için standart bir dosyayı görüntülemek istese, URL’i https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini şeklinde send edebilir ve \windows\win.ini dosyasını okuyabilir.

/etc/passwd dosyası sistemde aktif kullanıcıların hesap bilgilerini barındırmaktadır. Her hesap için kullanıcı kimliği, grup kimliği, ana dizin, shell gibi birçok yararlı bilgiler içeren sistem hesaplarının bir listesini içermektedir. Buarada hedef işletim sistemi Unix tabanlı bir işletim sistemi olduğundan /etc/passwd dosyasını görüntülemeye çalışacağız.

Lab 1: File path traversal, simple case

Bu laboratuvarda dizin geçişi yaparak /etc/passwd dosyasının içeriğini görüntüleyeceğiz.

İlk olarak sayfada herhangi bir ürünü görüntülemek için bir istekte bulunalım ve burp suite aracıyla inceleyelim.

Burp aracıyla yakaladığımız isteği forward edelim ve jpg dosyasının içeriğinin filename parametresi ile görüntülendiğini doğrulayalım. Ardından isteği repeatera gönderelim.

Daha önce bahsettiğimiz gibi saldırgan herhangi bir dosyanın konumunu bilemez. Bu yüzden sırasıyla; ../etc/passwd, ../../etc/passwd, ../../../etc/passwd komut satırlarını filename parametresi için tanımlayıp send edelim. jpg dosyaları 3 dizin altında saklandığı için son komut satırımız bize dosya içeriğini görüntüleyecektir.

Congratulations, you solved the lab!

Lab 2: File path traversal, traversal sequences blocked with absolute path bypass

Bu laboratuvarda herhangi bir dizin geçişi yapmadan görüntülemek istediğimiz dosya içeriğini /etc/passwd elde edebiliriz.

Sayfada herhangi bir ürünü görüntülemek için bir istekte bulunalım ve burp suite aracıyla inceleyelim. Burp aracıyla yakaladığımız isteği forward edelim ve ardından isteği repeatera gönderelim.

filename parametresine sadece çekmek istediğimiz /etc/passwd dosyasını belirtelim ve isteği send edelim. Yanıtta dosya içeriğinin görüntülendiğini görmekteyiz.

Congratulations, you solved the lab!

Lab 3: File path traversal, traversal sequences stripped non-recursively

Bir uygulama, kullanıcı tarafından girilen dosya adından dizin geçiş sıralarını (../) şeritler veya engellerse, çeşitli teknikler kullanarak savunmayı atlamak mümkün olabilmektedir.

Sayfada herhangi bir ürünü görüntülemek için bir istekte bulunalım ve burp suite aracıyla inceleyelim. Burp aracıyla yakaladığımız isteği forward edelim ve ardından isteği repeatera gönderelim.

Daha önce kullandığımız ../../../etc/passwd komut satırı sonuç vermeyecektir. Uygulama tarafından dizin geçiş dizeleri engellenmektedir. Dolayısıyla komut satırımızı ….//….//….//etc/passwd şeklinde değişip isteği send edelim. Yanıtta dosya içeriğinin görüntülendiğini görmekteyiz.

Congratulations, you solved the lab!

Lab 4: File path traversal, traversal sequences stripped with superfluous URL-decode

Bazen web uygulaması, dizin geçişi saldırısı için kullanılan girdiyi algılayabilmektedir. Örneğin bir önceki laboratuvarda kullandığımız teknik işe yaramayabilir. Daha farklı teknikler (encoding gibi) kullanmamız gerekmektedir. Bu laboratuvarda girdimize URL kodlaması yaparak waf bypass etmeye çalışacağız.

Sayfada herhangi bir ürünü görüntülemek için bir istekte bulunalım ve burp suite aracıyla inceleyelim. Burp aracıyla yakaladığımız isteği forward edelim ve ardından isteği repeatera gönderelim.

filename parametremize ..%252f..%252f..%252fetc/passwd komut satırını tanımlayıp send ettiğimizde dosya içeriğini görüntüleyebiliriz. Girdimizi iki defa decode ettiğimizde ../../../etc/passwd komut satırına eş değer olduğu görülecektir. / karakterleri %252f şeklinde encode edilerek girdi sağlanmıştır.

Congratulations, you solved the lab!

Lab 5: File path traversal, validation of start of path

Burp aracımızla gönderilen istekleri incelediğimizde filename parametresi ile jpg dosyasının içeriğinin görüntülendiğini doğrulamıştık. Bu laboratuvarda farklı olarak filename parametresinde jpg dosyasının konumu görülmektedir. Eğer filename girdisinin dosya konumu ile başlaması gerekiyorsa, önce dosya konumunu ardından saldırı komutunu belirtebiliriz.

İsteği incelediğimizde filename parametresi altında 5.jpg adlı dosyanın dosya yolunu görmekteyiz. Bu isteği forward edelim ve ardından isteği repeatera gönderelim.

jpg dosyaları 3 dizin altında saklandığı için ../../../etc/passwd komut satırımız bize dosya içeriğini görüntüleyecektir. Dolayısıyla filename parametremizi /var/www/images/../../../etc/passwd şeklinde send ediyoruz.

Congratulations, you solved the lab!

Lab 6: File path traversal, validation of file extension with null byte bypass

filename parametresi için tanımlanacak değerin jpg yada png uzantısıyla bitmesi gerekiyorsa, uzantıdan önce boş bir bayt değeri kullanılarak waf bypass edilebilir.

Sayfada herhangi bir ürünü görüntülemek için bir istekte bulunalım ve burp suite aracıyla inceleyelim. Burp aracıyla yakaladığımız isteği forward edelim ve ardından isteği repeatera gönderelim.

Send edeceğimiz dosya png uzantılı olmak zorundadır. Dolayısıyla içeriğini çekmek istediğimiz passwd dosyası ile .png uzantısı arasına boş bir bayt değeri (%00) ekleyip ../../../etc/passwd%00.png şeklinde isteğimizi gönderelim. Sonrasında dosya içeriğinin döndüğünü görmüş olacağız. Son laboratuvarın çözümü de bu şekildedir.

Read Entire Article