# Medium

Di bawah ini adalah *source-code* dari *file upload* level medium di DVWA.

```php
vulnerabilities/upload/source/medium.php
<?php
​
if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
​
    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
​
    // Is it an image?
    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
        ( $uploaded_size < 100000 ) ) {
​
        // Can we move the file to the upload folder?
        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}
​
?>
```

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

Jika kita melakukan hal yang sama seperti sebelumnya (meng-upload file ekstensi `.php`), maka akan muncul penolakan seperti berikut:

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9UxXk3UZ5E9w6kqhM%2Fimage.png?alt=media\&token=6716d856-2c12-4d38-b7a3-4950bfe785df)

Ini karena pada level ini terdapat validasi terlebih dahulu, hanya ekstensi `JPEG` dan `PNG` saja yang diizinkan.

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

Setelah mencoba berbagai cara, akhirnya saya menemukan cara untuk mem-*bypass*-nya, yaitu dengan menggunakan Burpsuite.

**Pertama**, ubah nama **shell.php** yang sebelumnya kita buat menjadi **shell.php.png**.

**Kedua**, lakukan upload dan *intercept* *request* yang kita lakukan menggunakan Burpsuite.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9XRAJLawRkITmfpJH%2Fimage.png?alt=media\&token=7d0ef018-aa91-4218-b53b-3f274fda92d6)

Dan rubah `filename` nya menjadi **shell.php**.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9Xt-E31wFMymn6lNU%2Fimage.png?alt=media\&token=c75ea1ba-97c8-4942-a5d9-bf15c491d8c9)

Setelah itu matikan *intercept*-nya agar request terkirim, dan file tersebut akan berhasil di-upload ke server.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9RKAa0IUGAK6iIQAp%2Fimage.png?alt=media\&token=2726a27d-5c2e-433c-8bfc-dc2ddf0bf685)

Selanjutnya kita bisa menjalankan shell tersebut seperti sebelumnya.

Happy Hacking! 🍻
