Damn Vulnerable Web Application – Brute Force – Low
Damn Vulnerable Web Application (DVWA) adalah aplikasi web PHP/MySQL yang sangat rentan. Tujuan utamanya adalah untuk menjadi bantuan bagi profesional keamanan untuk menguji keterampilan dan alat, membantu pengembang web lebih memahami proses mengamankan aplikasi web dan untuk membantu tester tentang keamanan aplikasi web. Ini adalah tulisan pribadi sebagai pengingat saja, jika pembahasannya loncat-loncat harap maklum.
Untuk membuat DVWA, kita bisa menggunakan yang sudah tersedia yaitu https://github.com/digininja/DVWA. Beberapa skenario yang bisa kita uji yaitu 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. Kalian setidaknya memiliki pengetahuan dasar pada protokol HTTP. DVWA yang dipakai nanti menggunakan bahasa php, apache, dan mysql. Kalian bebas bisa menggunakan package install seperti XAMPP ataupun LAMPP. Silahkan kalian download saja menggunakan git git clone https://github.com/digininja/DVWA.git
Persiapan Server DVWA
Untuk mempersiapkan server cukup mudah, kalian install terlebih dahulu aplikasi XAMPP/LAMPP. Setelah kalian install XAMPP dan LAMMP, copy saja folder DVWA yang telah didownload sebelumnya kedalam folder httdocs.
Langkah selanjutnya rename saja config/config.inc.php.dist menjadi config/config.inc.php. Lakukan setupa dengan membuka browser untuk akses url http://127.0.0.1/dvwa/setup.php. Berikut tampilkan website DVWA nya
Setup Database
Untuk mempersiapkan databasenya, ubah saja informasi mengenai username dan password di config/config.inc.php menjadi sesuai server yang kita punya terutama untuk username dan password nya. Seperti berikut
$_DVWA = array(); $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; #semula dvwa $_DVWA[ 'db_password' ] = ''; #semula p@ssw0rd $_DVWA[ 'db_port'] = '3306';
Bila sudah klik saja tombol create/reset database – bila berhasil akan tampil beberapa informasi
akan berubah halamanya menjadi berikut
Login saja dengan informasi berikut
Default username = admin
Default password = password
Serangan Brute Force
Bruteforce Password adalah bentuk serangan dengan melakukan uji coba login secara berkali-kali. Untuk mengujinya bisa kita akses url diatas http://localhost/dvwa/vulnerabilities/brute/. Untuk menguji brute force – low methode GET yaitu localhost/dvwa/vulnerabilities/brute/?username=admin&password=passwordk&Login=Login
dan butuh cookies. Mari kita buka file /Applications/XAMPP/xamppfiles/htdocs/DVWA/vulnerabilities/brute/index.php
didalamnya menggunakan cookies sebagai parameter uji coba yaitu security dan melewatkan 3 kode yang bisa dipanggil yaitu
$method = 'GET'; $vulnerabilityFile = ''; switch( $_COOKIE[ 'security' ] ) { case 'low': $vulnerabilityFile = 'low.php'; break; case 'medium': $vulnerabilityFile = 'medium.php'; break; case 'high': $vulnerabilityFile = 'high.php'; break; default: $vulnerabilityFile = 'impossible.php'; $method = 'POST'; break; }
Mari kita lihat menggunakan software Burp Suite agar dapat modifikasi cookies nya nanti. Sekarang kita lihat kode low.php /Applications/XAMPP/xamppfiles/htdocs/DVWA/vulnerabilities/brute/source/low.php
yang nanti kita akan uji coba login via GET yaitu ada paramater username dan password
<?php if( isset( $_GET[ 'Login' ] ) ) { // Get username $user = $_GET[ 'username' ]; // Get password $pass = $_GET[ 'password' ]; $pass = md5( $pass ); // Check the database $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "<p>Welcome to the password protected area {$user}</p>"; echo "<img src=\"{$avatar}\" />"; } else { // Login failed echo "<pre><br />Username and/or password incorrect.</pre>"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
Sehingga untuk uji coba login berikut
Bila kita akan menguji coba untuk brute force gunakan settingan cookies low
Lebih suka menggunakan burp suite karena harus login terlebih dahulu kemudian melakukan uji buat brute force. Kemudian uji coba brute force intruder dengan settingan berikut
GET /dvwa/vulnerabilities/brute/?username=mulkan&password=§12345§&Login=Login HTTP/1.1 Host: localhost sec-ch-ua: "Not;A=Brand";v="99", "Chromium";v="106" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=aab77fb04ec9fc2012044e6f020e9c7e; security=low Connection: close
nanti bila berhasil akan ada tulisannya jika berhasil