DVWA Çözümleri: Bölüm 2

Bu bölümde SQL Injection, File Inclusion, XSS ve CSRF zafiyetlerini inceleyeceğiz. Bir önceki bölümde Brute Force ve Command Execution zafiyetlerinin çözümlerini paylaşmıştık.

SQL Injection

dvwa sql injection

Karşımızda User ID’ye göre veri tabanından kayıt getiren bir sistem var. “1” değerini girip deneme yapalım. SQL Injection olmazsa olmazı (tırnak) atıp sistemi hata verdirmeye zorlayalım. Sistem hata verdi. Bu hatanın nedeni tırnak karakterinin meta karakter olmasından kaynaklanır. Bu karakterlerin özel anlamları vardır. Sayfanın kaynak kodunu incelediğimizde bizden aldığı değeri “id” parametresine atıp alttaki SQL sorgusunu çalıştırdığını görüyoruz.

SELECT first_name, last_name FROM users WHERE user_id = ‘$id’

Sorgudan yola çıkarak;

‘ or ‘1’=’1 payloadını giriyoruz bunun sonucu true döneceğinden tüm kayıtlar gelecektir.

dvwq sql

Şimdiki hedefimiz sütun yani kolon sayısı bulmak. Bu işlemi order by ile yapabiliriz.
‘ order by 1#
‘ order by 2#
‘ order by 3# komutunda hata aldık buradan çıkaracağımız sonuç 2 kolon varmış.

SQL’de # karakterinden sonra kalan kısımlar yorum satırına çevriliyor yani işleme almıyor.

sql order by

Kolon sayısını bulmamızın nedeni union komutu kullanmak içindi, union select komutu kullanılırken kolon sayılarının aynı olması gerekiyor.

sql union

‘ or ‘1’=’1′ union select database(),2# payloadını kullanıyoruz.

database() komutu ile database adını öğreneceğiz. Database adımızın dvwa olduğunu görüyoruz. Database adımızı öğrendikten sonra tablo isimlerini öğrenmemiz gerekiyor.

sql table name

‘ or ‘1’=’1′ union select table_name,2 from information_schema.tables where table_schema=’dvwa’# payloadı ile tablo adlarını görüntülüyoruz. “users” tablosundan bilgileri çekmeye çalışalım. Bunun için kolon adlarını bulmamız gerekiyor.

sql column name

‘ or ‘1’=’1′ union select column_name,2 from information_schema.columns where table_name=’users’# payloadı ile de kolon isimlerini çekiyoruz.
user_id,first_name,last_name,user,password,avatar” adlarında kolonlar varmış. Kolon isimlerini öğrendikten sonra geriye satırdaki kayıtları çekmek kalıyor.

sql dump

‘ or ‘1’=’1′ union select user,password from users# payloadı ile users tablosundaki user ve password sütunlarındaki bilgileri çekmiş olduk. Zafiyet, kullanıcıdan alınan değerin filtrelemeden geçmeden SQL sorgusuna dahil edilmesinden kaynaklanıyor.

File Inclusion

file inclusion

Bu kısımda File inclusion zafiyetini göreceğiz. GET isteği ile bizden aldığı inputu page parametresine atıyor. Bu değişken üzerinden dosyayı çağırıyor. İşleme koyulmadan önce bir üst dizine nasıl geçiş yapabiliriz onu öğrenelim.
..” komutu ile bir üst dizine çıkabiliyoruz.
.” komutu ise olduğumuz dizine işaret ediyor. Sistemde olmayan bir dosya yolu verip sistemin hata vermesini sağlamaya çalışalım.

dvwa file inclusion

page parametresine test değerini veriyoruz ve sistemde böyle bir dosya olmadığı için hata verdi. Verdiği hatada dizin yolunu bize göstermiş oldu. Yani yukarıdaki resmi inceleyerek 5 kez üst dizine çıkarsak, ana dizinine ulaşabileceğimizi görüyoruz.

dvwa lfi

page parametresine “../../../../../etc/passwd” yolunu girdiğimizde etc/passwd dosyasını okuyabiliriz.

 

CSRF – Stored XSS

Bu aşamada CSRF zafiyeti ile Stored XSS zafiyetini beraber kullanacağız. Senaryomuz şu şekilde bir parola değiştirme sayfası var, bu sayfada parola değiştirme isteği hep aynı şekilde yapılıyor.

dvwa csrf

Karşımızda bir parola değiştirme sayfası mevcut. Parolayı değiştirdiğimizde URL kısmında yapılan isteği gösteriyor. Ben parolamı test olarak değiştirdim. password_new, password_conf değişkenlerine attığını görüyoruz. Bu URL adresini saldırgan kendine göre düzenleyip, bir şekilde bu isteği bize yaptırmayı başarırsa parolamız saldırganın isteği şekilde değişecektir. Stored XSS’i bu aşamada kullanacağız.

http://192.168.170.133/dvwa/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change

Stored XSS

dvwa stored xss

Bu kısımda ise bir ziyaretçi defteri sayfası var. Burada yazmış olduğunuz mesaj, bu sayfayı ziyaret eden herkes tarafından görülüyor. Kullanıcıdan mesaj alırken herhangi bir filtreleme yapılmadığından zararlı bir kod enjekte edebiliriz. Biz buraya CSRF zafiyetini tetikleyen payloadı yerleştireceğiz.

Böylece bu sayfayı ziyaret eden herkesin parolası bizim belirlediğimiz şekilde değişmiş olacak. Message kısmında bir uzunluk sınırlaması var, bu sınırlamayı öğeyi denetle diyerek resimdeki gibi değiştirebilirsiniz. Alttaki payloadu mesaj içine yazıp yolluyoruz. Bu payload ile resim dosyasının çağrılması için bizim CSRF zafiyeti bulunan adrese GET isteğinde bulunacak.

<img style=”display:none” src=”http://192.168.170.133/dvwa/vulnerabilities/csrf/?password_new=hacker&password_conf=hacker&Change=Change” alt=””>

Böylelikle bu sayfayı ziyaret eden herkesin parolası bizim belirttiğimiz gibi “hacker” olarak değiştirilecek.
XSS zafiyeti, kullanıcıdan input alırken herhangi bir filtrelemeden geçirilmeden kayıt edilmesinden kaynaklıydı. CSRF zafiyetinde ise herhangi bir doğrulama sistemi olmadan isteğin işleme alınıyor olmasından kaynaklanıyor.

DVWA Çözümleri: Bölüm 2” için bir yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir