Damn Vulnerable Web Application(DVWA), savunmasız olan bir PHP/MySQL web uygulamasıdır. Temel hedefi güvenlik profesyonellerinin yeteneklerini ve araçlarını yasal bir ortamda test etmelerine yardımcı olmak, web geliştiricilerinin, web uygulamalarını güvenli hale getirme süreçlerini daha iyi anlamalarına yardımcı olmak ve öğretmenler/öğrenciler için bir sınıf ortamında web uygulama güvenliğini öğretmek/öğrenmek için yardımcı olmaktır.

Github Sayfasındaki Açıklamalardan Alıntılar

DVWA’nın amacı, basit ve kolay bir arayüzle, çeşitli zorluk dereceleriyle, en yaygın web güvenlik açıklarından bazılarını uygulamaktır. Lütfen, bu yazılımla birlikte belgelenmiş ve belgelenmemiş güvenlik açıkları olduğunu unutmayın. Bu kasıtlı. Mümkün olduğunca çok sayıda sorunu denemeniz ve keşfetmeniz önerilir.

Uyarı

Damn Vulnerable Web Application çok savunmasız! Güvenliği ihlal edeceğinden, barındırma sağlayıcınızın genel html klasörüne veya Internet’e bakan sunuculara yüklemeyin. NAT ağ moduna ayarlanmış bir sanal makine (VirtualBox veya VMware gibi) kullanılması önerilir. Misafir makinede, web sunucusu ve veritabanı için XAMPP’yi indirip yükleyebilirsiniz.

Lisans

DVWA GNU lisansı altındadır ve yeniden dağıtabilir veya değiştirilebilir.

Docker Kurulumu

docker run --rm -it -p 80:80 vulnerables/web-dvwa

Docker Hub sayfası: hub.docker.com/r/vulnerables/web-dvwa

Windows Kurulum

DVWA’yı Windows’ta WampServer veya XAMPP ile birlikte kurabilirsiniz. Bu anlatım linux’a yöneliktir.

Kurulum Adımları

Linux Paketleri

Debian tabanlı bir Linux dağıtımı kullanıyorsanız, aşağıdaki paketleri (veya bunların eşdeğerlerini) yüklemeniz gerekir:

apt-get -y install apache2 mysql-server php php-mysqli php-gd libapache2-mod-php
  • www.dvwa.co.uk sitesinden arşivi indirip dvwa olarak adlandırın.
  • dvwa dizinini /var/www/html içerisine atın. /var/www/html apache2 nin DocumentRoot niteliği ile ayarlı olan web sunucusunun varsayılan kök dizinidir.
  • Apache ve MySql servislerini başlatın.
service apache2 start
service mysql start
  • Artık localhost/dvwa üzerinden erişebilirsiniz.
  • localhost’tan eriştiğinizde dvwa aşağıdaki gibi bir config hatası verecektir:
DVWA System error - config file not found. Copy config/config.inc.php.dist to config/config.inc.php and configure to your environment.
  • Sizden config dosyasının uzantısını php.dict ten php ye çevirmenizi ve ortamınıza göre yapılandırmanızı söylüyor.
cd /var/www/html/dvwa/config/
cp config.inc.php.dist config.inc.php
  • localhost/dvwa/ sizi setup.php sayfasına veritabanı oluşturmak ve sıfırlamak için yönlendirecektir.

Veritabanı Kurulumu

  • Veritabanını kurmak için Create/Reset Database butonuna tıklayınız. Bu, veritabanını sizin için bazı verilerle oluşturacak/sıfırlayacaktır.
  • Veritabanınızı oluşturmaya çalışırken bir hata alırsanız, veritabanı kimlik bilgilerinizin doğru olduğundan emin olun.
  • Veritabanı zaten mevcutsa, silinecek ve veriler sıfırlanacaktır.
  • Bunu, herhangi bir aşamada yönetici kimlik bilgilerini sıfırlamak için de kullanabilirsiniz.
  • Değişkenler varsayılan olarak aşağıdakilere ayarlanır:
$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'root';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
  • Eğer MySQL yerine MariaDB kullanıyorsanız (MariaDB Kali’de varsayılan), veritabanı root kullanıcısını kullanamazsınız, yeni bir veritabanı kullanıcısı oluşturmanız gerekir. Bunu yapmak için, veritabanına kök kullanıcı olarak bağlanın, ardından aşağıdaki komutları kullanın:
mysql> create database dvwa;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on dvwa.* to dvwa@localhost identified by 'xxx';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
  • Veritabanı ismi, kullanıcı adı ve parolayı config dosyasına aşağıdaki şekilde yazın:
$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'dvwa';
$_DVWA[ 'db_password' ] = 'xxx';

Diğer Yapılandırmalar

Klasör İzinleri

Bu izinlerin durumunu setup.php sayfasında görebiliriz.

  • ./hackable/uploads/ – Web servisi tarafından yazılabilir olması gerekiyor (Dosya Yükleme için).
  • ./external/phpids/0.6/lib/IDS/tmp/phpids_log.txt – Web servisi tarafından yazılabilir olması gerekiyor (PHPIDS kullanmak istiyorsanız).
  • /var/www/html/dvwa/config – Web servisi tarafından yazılabilir olması gerekiyor.
chmod o+w /var/www/html/dvwa/hackable/uploads/
chmod o+w /var/www/html/dvwa/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt
chmod o+w /var/www/html/dvwa/config

PHP Yapılandırması

  • allow_url_include = on – Uzak Dosya Eklemeleri (RFI) için izin verir [allow_url_include]
  • allow_url_fopen = on – Uzak Dosya Eklemeleri (RFI) için izin verir [allow_url_fopen]
  • safe_mode = off – (PHP <= v5.4 ise) SQL Enjeksiyonuna (SQLi) izin verir [safe_mode]
  • magic_quotes_gpc = off – (PHP <= v5.4 ise) SQL Enjeksiyonuna (SQLi) izin verir [magic_quotes_gpc]
  • display_errors = off – (İsteğe bağlı) Daha az ayrıntılı hale getirmek için PHP uyarı mesajlarını gizler [display_errors]

allow_url_fopen veya allow_url_include devre dışı bırakıldıysa, php.ini dosyanıza aşağıdakileri ayarlayın ve Apache’yi yeniden başlatın. (Sizdeki php versiyonu farklı olabilir.)

sed -i 's/allow_url_fopen = Off/allow_url_fopen = On/' /etc/php/7.0/apache2/php.ini
sed -i 's/allow_url_include = Off/allow_url_include = On/' /etc/php/7.0/apache2/php.ini
service apache2 restart

reCAPTCHA Yapılandırması

Google’ın robot doğrulama servisi olan reCAPTCHA, insecure reCAPTCHA zafiyetinde kullanılmak için yapılandırılması gerekir.

  • $_DVWA[ ‘recaptcha_public_key’ ] & $_DVWA[ ‘recaptcha_private_key’ ] – Bu değerlerin şu adresten oluşturulması gerekir: www.google.com/recaptcha/admin

Not: Güvenliğiniz için daha önceden kendi siteniz için kullandığınız bir reCAPTCHA varsa, DVWA için kullanmayın. Yeni bir tane oluşturun.

  • Tüm ayarları doğru bir şekilde yaptıktan sonra setup sayfasında butona basınca veritabanı başarılı bir şekilde oluşması gerekir.

Varsayılan Kimlik Bilgileri

admin:password

Giriş URL’si: http://127.0.0.1/dvwa/login.php

Güvenlik Seviyesi

Login olduktan sonra aşağıdaki ana ekran gelecek.

DVWA Security kısmından güvenlik seviyesini düşük, orta, yüksek veya imkansız olarak ayarlayabilirsiniz. Güvenlik düzeyi DVWA’nın güvenlik açığı seviyesini değiştirir:

1. Düşük – Bu güvenlik seviyesi tamamen savunmasızdır ve hiç güvenlik önlemi yoktur. Kullanımı, web uygulama zafiyetlerinin kötü kodlama uygulamalarıyla nasıl ortaya çıktığı ve temel sömürü tekniklerini öğretmek ya da öğrenmek için bir platform olarak nasıl hizmet ettiğinin bir örneği olmaktır.

2. Orta – Bu ayar esas olarak geliştiricinin denediği ancak bir uygulamayı güvenli hale getiremediği kötü güvenlik uygulamalarına bir örnek vermektir . Ayrıca, kullanıcıların kendi sömürü tekniklerini iyileştirmek için bir meydan okuma görevi görmektedir.

3. Yüksek – Bu seçenek, kodun güvenliğini sağlamaya çalışmak için daha zor veya alternatif kötü uygulamaların bir karışımı ile orta zorlukların bir uzantısıdır . Savunmasızlık, çeşitli Capture The Flags (CTFs) yarışmalarında olduğu gibi, aynı ölçüde sömürüye de izin vermeyebilir.

4. İmkansız – Bu seviye tüm güvenlik açıklarına karşı güvenli olmalıdır . Savunmasız kaynak kodunu güvenli kaynak koduna karşılaştırmak için kullanılır.
DVWA v1.9’dan önce, bu seviye ‘yüksek’ olarak biliniyordu.

PHPIDS

PHPIDS v0.6 (PHP-Intrusion Detection System) PHP tabanlı web uygulamaları için bir güvenlik katmanıdır.

PHPIDS, kullanıcı tarafından sağlanan herhangi bir girdiyi, potansiyel olarak zararlı olabilecek kodun kara listesinin bir filtresine göre filtreleyerek çalışır. Web Uygulaması Güvenlik Duvarlarının (WAF’ler) güvenliği artırmaya nasıl yardımcı olabileceğine ve bazı durumlarda WAF’lerin nasıl engellenebileceğine dair canlı bir örnek olarak DVWA’da kullanılır.

PHPIDS’i bu site boyunca oturumunuzun süresi boyunca etkinleştirebilirsiniz.

DVWA Security kısmından açıp kapatabilirsiniz.

Web Güvenlik Açıkları

DVWA’yı kurduktan sonra aşağıda listelenen web güvenlik açıklıklarını, güvenlik seviyelerini değiştirerek test edebilirsiniz. Ayrıca her bir güvenlik açığı sayfasında kaynak kodu inceleyebilir ve ipuçlarına bakabilirsiniz.

  • Brute Force
  • Command Injection
  • CSRF
  • File Inclusion
  • File Upload
  • Insecure CAPTCHA
  • SQL Injection
  • SQL Injection (Blind)
  • Weak Session IDs
  • XSS (DOM)
  • XSS (Reflected)
  • XSS (Stored)
  • CSP Bypass
  • JavaScript