- Katılım
- 21 Ocak 2024
- Mesajlar
- 49
- Tepkime puanı
- 29
- Puanları
- 18
Directory Traversal & PortSwigger Directory Traversal Lab Çözümleri
Merhaba, serimize directory traversal'dan devam ediyoruz. Eminim ki çoğu ctf'de web tabanlı kategorilerinde veya makinelerde bu zaafiyete rastlamışsınızdır. Esasında yapılması, ortaya çıkması basit bir temele dayansa da kritik verileri ele geçirmeye yarayan bir zaafiyet olduğu aşikar. En basit örnekle root bilgilerini almanızın ne denli hasarlara yol açabileceğini söylememe gerek yok.
Kullanıcının normalde erişemeyeceği dizinlere bu zaafiyet sayesinde ulaşması olarak tanımlayabiliriz. "Mesela "/image?filename=15.jpg" URL böyle bir şeyler dönmüş,
karşımızda jpg uzantılı bir dosya var. Bunu da repeater'a atıp denemeler yapacaksınız. filename'den sonra ../../ gibi parametrelerle alt dizinlere inmenize uygulama şayet izin veriyorsa D. traversal olduğuna kanaat getirebiliyorsunuz zira sizin yetkiniz olmasa dahi alt dizinlere inebiliyor ve bu dizinlere okuma, yazma, silme vd. işlemleri yapabiliyorsunuz. Genelde CTF'lerde 80-443le ayağa kalkan uygulamalarda user-pass bilgisi almak için çok kullanılır. salt dizindeki verileri okumak yerine bunlara gidip içindeki verileri de almak mümkün. cd /etc/passwd & cat /bilmemnedizi gibi.... ya da direkt rm -r ile içeriği de silebilirsiniz.
Bu zaafiyetin büyük şirketlerde, alışveriş sitelerinde olduğunu göz önünde bulundurunca ekonomik olarak yıkıma yol açabileceğini kestirebiliriz. Ya da kritik verilerin bulunduğu kamu tüzel kişiliklerinin uygulamaları gibi gibi....
Buradan Lab'ların tümüne erişebilirsiniz. Başlayalım.
6 tane Labımız var. Her birini ayrı ayrı çözeceğim.
![4izcsk1.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2F4izcsk1.png&hash=c31f77a3a74557fd95fb7bdd1e66f45b)
Birincisiyle başlayalım. Anlatımlardan edindiğiniz bilgiler ışığında basic olarak ../../../../etc/passwd parametresi aklınızda yer edinmiştir. Laba girdikten sonra file, dosya bulmam lazım, benim ilgimi burada resimler çekiyor. Herhangi bir resme gidip burple isteği yakalıyorum.
![mopm7gd.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fmopm7gd.png&hash=7f2820be0afb641fe814b417f0e079c1)
Repeater'ı isteği yollayıp "GET /image?filename=15.jpg HTTP/2" parametredeki 15.jpg'i silip ../../../../../../../../../../../../etc/passwd denemesi yapıyorum ve bingo! İlk labı çözmüş olduk.
![mnlecej.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fmnlecej.png&hash=688b4178d0ba851dd98e82a74036485c)
Şimdi burada ../../../ parametrelerinin geçmediğini, ....// gibi parametreler kullanmamızı istiyor. En basitiyle siteyi yazan arkadaş WAF'a ../ parametresini engelletirse ben burada at koşturamam. Peki ben ....// yazsam acaba iş yapar mı ? Çünkü salt ../ kısmını engellediği için devamında ../ yine kalmış oluyor ve belki istediğimiz değeri döndürüp zaafiyeti sömürmüş olacağız. Deneyelim.
../../../etc/passwd denediğimde
HTTP/2 400 Bad Request
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 14
"No such file"
çıktısı alıyorum. peki ....//....//....//....//....//....//etc/passwd denesem ?
Cırt, bunda da 400 aldım. O zaman demek ki ya WAF açık, ya da zaten inmek istediğimiz dizindeyiz. Neticede ../../ parametrelerini /'a ulaşmak için kullanmıyor muyuz ? Belki de oradayızdır ? O zaman salt /etc/passwd giriyorum ve bingo!
![j0pbyib.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fj0pbyib.png&hash=5c7ab7a9bea439edbb7702503b4ffa88)
Diğer laba geçelim.
![abrhk0k.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fabrhk0k.png&hash=276c77bf7ebe7ac0816b57eedad178b4)
Lab açıklamasında ../ kısmının strip edildiğinden bahsediliyor. Yani yukarıda anlattığım yazılımcı gözünden bakış burada geçerli. Aklıma direkt ....//....// geliyor ki strip edildikten sonra geriye ../../ kalsın ve biz de dizine inelim rahatça. laba girip resmin isteğini yakaladım ve repeater'a attım.
![3oh8sqz.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2F3oh8sqz.png&hash=e533d20ed61c860ba6f4d9b42d55498d)
Bingo! Dediğim gibi çıktı. ....// yaptığımızda ../ parametresini stripledi ve bize yine ../ kaldı ve zaafiyeti sömürmüş olduk.
Gelelim diğer laba.
![fimfca7.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Ffimfca7.png&hash=fd6bb86bd0133b9a52b1f194b6a6d157)
Şimdi öncelikle belirteyim ki labda URL decode yapmamı istiyor. Yani yazılımcı olan arkadaş waf'a ../ parametresini koysa da URL'i encode ederek belki bypass edebiliriz. Burada sizin yaratıcılığınız konuşacak. 1 kere encode ettiğiniz zaman da WAF'a takılabilir, gerekirse 2,3 kere encode etmek de fayda var. Bileşik faiz gibi düşünün, para getiren para. Burada da encode edilen encode edilmiş URL. Açıklayıcı olduğunu düşünüyorum
Peki... CyberChef imdadımıza koşsun. CyberChef, encode/decode yapmanıza yarayan harikulade bir proje. Belirttiğim linkten gidip url encode'u aktif ediyoruz. ../../../../ parametresini encode ediyorum ve istek olarak Burp'te yollayacağım.
![fnz3900.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Ffnz3900.png&hash=cc584b41c5a13da835bf8f3ef5bf0a50)
yazılımcı arkadaş waf'a URL encode edilmiş halini de eklemiş, şah çekti bize. URL'i tekrar encode edelim.
![at90zjp.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fat90zjp.png&hash=087422a7d544b50d1833b6cac84d6350)
sonunda etc/passwd ekleyip isteği yolluyorum.
![qe2b2uf.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fqe2b2uf.png&hash=2ae9a606384f64450b8bf5ee85cceaca)
evet! PoC yazıp 500 doları cukkalayabilirsiniz artık
![o7oofbn.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fo7oofbn.png&hash=4a887b04172b84ad1306b32c5b2423ae)
Gelelim diğer labımıza. Burada daha farklı bir senaryo var. Öncelikle herhangi bir resmi burpte yakalayıp Repeater'a atalım.
![lknr08q.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Flknr08q.png&hash=aefdadef45de6a719aaa40b480a4fd6b)
Şimdi filename='den sonra /etc/passwd & ../../etc/passwd vd. parametrelerle deneme yapıyorum ama her defasında 400 hatası alıyorum. Labın açıklamasında belirli bir path'in validation yani doğrulama yaptığını söylüyor. Bu da demek oluyor ki filename'den sonra bana vereceği path'i kullanmam lazım ki backend tarafı bu algılasın, yoksa path traversal yemiyor illa da validation'ı yapmak zorunda. İşin özünde yapsa da yapmasa da biz zaten kök dizine gideceğiz. Açıkçası saçma, bir o kadar da mantıklı zira otomasyon yapsan filename'den sonra otomatik parametre girersin ama validation olduğunda bunu yapamazsın ya da buna uyarlaman lazım. (bug hunting yapıldığı göz önüne alınarak bu tarz bir yorumda bulundum.) Peki, validation'ı "/var/www/images/" bu path'te yapıyorsa ben de bundan sonra parametre denemesi yapacağım.
![gmletzd.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fgmletzd.png&hash=e265061afa759f08922d817cad07e753)
Evet, tam da bu şekilde. Validation'ı yaptı, köke indik ve zaafiyeti sömürdük. Soruyu yazan arkadaşın hayal dünyasına selam gönderip diğer Lab'a geçiyorum.
![psn160m.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fpsn160m.png&hash=7a9e8c5d9d82358a9c160b344423fc29)
Açıklamada validation'ı dosya uzantısıyla yaptığını söylüyor, yani parametreleri girdikten sonra .jpg'se jpg yoksa diğer uzantıları mutlaka ekleyeceğim yazacağım parametreye. Yoksa zaafiyeti sömüremeyeceğim.
Klasik parametrelerle girişince 400 hatası alıyorum ve Lab'ın son kısmını okuyoruz. "with null byte bypass" bypass edelim biz de. Ondan önce null byte'ın genel mantığını anlatalım.
![tuqp8fj.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Ftuqp8fj.png&hash=eba52de7f5708a125a759a5a7de1d147)
Bu güzel özet için Mdisec hocama selamlarımı iletiyorum. Null byte'ı injection'ı bilmezseniz bile Bilal'e anlatır gibi öğrenmiş oluyorsunuz. Ben de size anlatacağım şimdi. Öğrenmeyen kalmasın
Şimdi request.get'ten sonra ../../../............. parametresi var. Nullbyte'ı çakana kadar devamını backend'de okuyor ama eğer null byte enjekte edebiliyorsanız devamını okumuyor. Bu da ne demek ? Devamını okumadığında sonuna /etc/passwd yazıp path traversal'ı arka planda koşturabiliriz demek. Bunu da %00 parametresiyle yani null byte'ı enjekte ederek yapacağız gayet tabi. Mantığı özetle bu şekilde.
Meraklısına şu içeriği bırakıyorum:
Null Byte Injection
![b9m27bd.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fb9m27bd.png&hash=dab8e0896bf7ec97ea1b413bec48ba74)
Şimdi, 45.jpg'ten sonrasına aşağıdaki gibi kodu enjekte ediyorum.
GET /image?filename=../../../../../../../etc/passwd%00.jpg HTTP/2
![q4dl5nc.png](/proxy.php?image=https%3A%2F%2Fi.hizliresim.com%2Fq4dl5nc.png&hash=f28f6efec072fd0a920cdecb0d381bfb)
bingo! null byte'ı enjekte etmenin mantığını anlattım + Lab'ın açıklamasındaki .jpg yani extension validation olayını da gerçekleştirdik. Dosyanın uzantısı neyse (somut duruma göre değişir) ona göre ekleme yapabilirsiniz.
Böylece PortSwigger'daki Directory Traversal'a ait tüm Lab'ları çözmüş olduk ve ekserinde çoğu yöntemi de kullandık. Bugbounty yaparken, CTF çözerken bu yöntemleri, path traversal mantığını göz ardı etmeyin.
Okuduğunuz için teşekkür ederim!
Directory Traversal ile ilgili birtakım içerikler;
![portswigger.net](/proxy.php?image=https%3A%2F%2Fportswigger.net%2Fcontent%2Fimages%2Flogos%2Facademy-twittercard.png&hash=be440a885ee0a819eb79158c2f817e54&return_error=1)
What is path traversal, and how to prevent it? | Web Security Academy
In this section, we explain: What path traversal is. How to carry out path traversal attacks and circumvent common obstacles. How to prevent path traversal ...
Path Traversal | OWASP Foundation
Path Traversal on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.
![infosecwriteups.com](/proxy.php?image=https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1024%2F1%2ACKC6c9MYbJbhw_drvEdQ-w.png&hash=2ad2a5c12116655ef20a66237b0cabee&return_error=1)
Finding Path Traversal Vulnerability
Local File Inclusion (LFI) also known as path traversal is a vulnerability that can potentially allow an attacker to view sensitive…
![infosecwriteups.com](/proxy.php?image=https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afill%3A256%3A256%2F1%2AA6LVtmXcJ3QJy_sdCyFx1Q.png&hash=bc3d1709ca652f93b55ade3965882dff&return_error=1)
-ilker
Son düzenleme: