# Low

Di bawah ini adalah *source-code* dari form login level low di DVWA.

```php
vulnerabilities/brute/source/low.php
<?php
​
if( isset( $_GET[ 'Login' ] ) ) {
    // Get username
    $user = $_GET[ 'username' ];
​
    // Get password
    $pass = $_GET[ 'password' ];
    $pass = md5( $pass );
​
    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $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>' );
​
    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];
​
        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }
​
    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
​
?>
```

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

Perhatikan bahwa form ini menggunakan method `GET`, sehingga data akan dikirim melalui URL. Contohnya, ketika saya mengisi nilai username menjadi *"admin"* dan password *"123456"*, maka data tersebut akan terlihat di URL-nya:

```
http://172.17.0.2/vulnerabilities/brute/?username=admin&password=12345&Login=Login#
```

Untuk mengetahui lebih lanjut tenang method `GET` ini, anda bisa membaca [artikel CodeSaya](https://codesaya.com/a/method-post-dan-get-pada-form-gnmjgzbsdt/).

Dan jika inputan salah akan muncul pesan seperti pada baris ke-26, yaitu muncul pesan seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzLA_a9XPm27LtPnBVu%2F-LzLDzQltbirYKPItXxJ%2FDeepinScreenshot_select-area_20200124132720.png?alt=media\&token=7abba448-5047-44f3-8e99-ad65e337d966)

Selain itu kita bisa melihat *cookie*-nya terlebih dahulu menggunakan Burpsuite (atau menggunakan *inspect element* pada browser).

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzLA_a9XPm27LtPnBVu%2F-LzLGmkddKi5RvNaoUeJ%2FDeepinScreenshot_select-area_20200124133814.png?alt=media\&token=41f4b821-cc64-4826-bb99-632910a1d2a9)

Terlihat bahwa terdapat *cookie* `PHPSESSID` dan `security` yang digunakan untuk mengatur web itu sendiri. *Cookie* ini akan kita gunakan untuk melakukan brute force.

Jika kita mengamati *source-code*-nya lagi, terlihat bahwa tidak adanya Anti-CSRF token, limit maupun CAPTCHA. Dengan demikian kita bisa dengan mudah melakukan brute force.

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

Pertama, siapkan wordlist yang akan kita gunakan. Saya telah membuat wordlist sendiri, seperti berikut:<br>

{% file src="<https://2370299969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MTchLGQ78eoG4OiLFnV%2Fuploads%2Fbj9W361fXq1UcpkY18uD%2Fpassword.txt?alt=media&token=43f4ddfa-0e54-4ac5-82d4-6b3ad1135025>" %}

{% file src="<https://2370299969-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MTchLGQ78eoG4OiLFnV%2Fuploads%2FdGZnNdbkVMCMpIxxXUqw%2Fuser%20list.txt?alt=media&token=f4ef079c-0fce-495e-bce9-a928969fd82e>" %}
DVWA Wordlist
{% endfile %}

Kedua, buka terminal dan jalankan *tool* Hydra seperti berikut:

```bash
hydra 172.17.0.2 -l admin -P DVWA-Wordlist.txt http-get-form "/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:F=Username and/or password incorrect.:H=Cookie:PHPSESSID=77jr5376ldag1qc392brdr2b11; security=low"
```

Penjelasan:

* `172.17.0.2` adalah IP target yang kita tuju (bisa juga menggunakan domain).
* `-l admin`, di sini saya mengasumsikan bahwa kita tahu username dari target adalah *"admin"* (bukan yang lain).
* `-P DVWA-Wordlist.txt` berfungsi untuk menentukan file wordlist untuk password yang akan dicoba satu per satu.
* `http-get-form` berfungsi untuk menentukan method yang digunakan pada form adalah `GET`.
* `username=^USER^&password=^PASS^` nilai tersebut akan diisi dari username (`-l`) dan password (`-P`) yang telah kita tentukan sebelumnya.
* `F=Username and/or password incorrect.` digunakan untuk membandingkan hasil brute force. Jika menghasilkan teks tersebut berarti password tidak valid.
* `H=Cookie:` digunakan untuk mengatur *cookie* yang digunakan ketika mengakses web tersebut.

Hasil dari perintah di atas adalah seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzLA_a9XPm27LtPnBVu%2F-LzLNdvsZvWSsGbKEBs2%2FDeepinScreenshot_select-area_20200124140931.png?alt=media\&token=7f0f2906-29af-4a09-b796-84f8c0fd3d9a)

Terlihat bahwa kata *"password"* adalah password yang valid.

Jika kita coba pada web, maka akan tampil seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzLA_a9XPm27LtPnBVu%2F-LzLO1imH2a0WPyxCQIM%2FDeepinScreenshot_select-area_20200124141118.png?alt=media\&token=20a12958-76e3-4f50-a811-f2a166946741)

Yups! Selamat! Kita berhasil melakukan brute force pada level low, sekarang kita lanjut ke level medium.😁<br>
