DVWA Tutorial : Web Deface from File Uploader

kucingbertanduk
5 min readSep 25, 2021

--

DVWA atau Damn Vulnerable Web Application merupakan salah satu lab yang menyediakan berbagai macam jenis serangan pada web app dengan berbagai tingkat atau level security mulai dari Low, Medium, High, hingga Impossible. Jika anda belum memiliki DVWA maka anda bisa pergi ke link berikut. Pada kesempatan kali ini saya akan melakukan attack pada File Uploader yang mampu mengarah pada Web Deface sekaligus melakukan analisis whiteboxing dan melakukan mitigasi dari serangan atau attack yang saya lancarkan.

“ Here we go! ” Fabrizio Romano.

src : BolaSkor.com

Berikut merupakan tools yang saya gunakan untuk melakukan attack dan demonstrasi:

  1. DVWA (sebagai target atau lab)
  2. Burpsuite Community Edition
  3. Web Browser (disini saya menggunakan firefox)
  4. Visual Studio Code & script landing deface page
  5. Kopi 😆

Set Up Target : DVWA

Setelah anda mengunduh dan melakukan instalasi DVWA pada host anda, maka seharusnya anda sudah dapat mengakses DVWA pada browser anda. Disini saya menggunakan firefox sebagai browser dengan add ons fire proxy untuk memudahkan konfigurasi proxy dengan burp suite. Silahkan login dengan admin password.

Login Page

Pada kali ini kita akan menggunakan level medium pada File Uploader, maka silahkan pilih Security Level as Medium > Submit. Lalu pergi ke bagian File Upload.

Security Level as Medium

Jika tampilan sudah seperti pada gambar dibawah ini maka target anda sudah siap untuk diserang. 🆒

File Upload Target

Set Up Our Tools

a. Burpsuite Community Edition
Burpsuite ini akan kita gunakan untuk mengubah HTTP Header request yang digunakan oleh DVWA File Upload. Silahkan buka dan pastikan burpsuite anda terhubung proxynya dengan web browser.

Burpsuite Community Edition

b. Visual Studio Code
Visual studio code akan kita gunakan untuk melakukan whiteboxing dan editing dari source code deface kita. Saya menggunakan template dari https://github.com/R3M4G/Deface

<html><head><title>Pwned</title><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.0.0/animate.min.css"/></head><body bgcolor="black" text="#00ff00"><center><MARQUEE width="20%" direction="left" height="30px">You have been hacked by @kucingbertanduk</MARQUEE><pre>@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3<div class="animate__animated animate__bounce animate__repeat-3"><h1 class="animate__animated animate__bounce">_______________________________________|                                       ||      Us3r@yOu:~$ cat message.txt      ||                                       ||      You have been hacked!            ||      deface template by               ||      https://github.com/R3M4G/Deface  ||                                       ||_______________________________________||_______________________________________|</h1></div>@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3@.9+@3~6/85<^@7<*@!@@$94+8$3</pre></center></body></html>

c. Kopi
Silakan beli kopi di warung sebelah dan seduh selagi hangat. ehe

Let’s Hack!

Ketika kita membuka file upload pada DVWA, kita akan jumpai disana diilustrasikan sebagai suatu laman yang menerima file untuk diupload. Disana tertulis bahwa seharusnya file yang diupload merupakan file gambar. Sebagai user biasa diharapkan untuk mengupload gambar dan klik ikon upload.

Setelah saya coba melakukan upload file png ternyata berhasil dan didapat tulisan mengenai tujuan dari file yang kita upload tadi disimpan. Hmm seharusnya informasi tersebut sangat tidak boleh diberikan kepada user. Information Disclosure.

Lalu saya terpikir, bagaimana jika saya mengupload file selain gambar yang seharusnya, seperti json file, js, php, script, html, txt, atau sejenisnya. Seharusnya akan sangat berbahaya jika file selain gambar bisa diupload karena bisa saja kita mengupload malicious script/backdoor.

Ketika saya coba mengupload file dengan ekstensi .html (script deface kita) ternyata tidak bisa serta terdapat tulisan bahwa uploader hanya menerima JPEG atau PNG.

whiteboxing

Jika kita lihat dari source code file uploader ini ternyata sudah melakukan validasi dari tipe file tersebut. Tipe file bisa kita jumpai pada HTTP Header dan biasa terdapat pada Content-Type. Sebagai contoh jika saya melakukan upload dengan file gambar maka Content-Type pada HTTP Header Request akan menunjukan image/jpeg dan jika file kode deface kita akan menunjukan html/text

HTTP Request saat file gambar diupload
HTTP Request saat script deface diupload

Maka hal inilah yang akan dicek oleh source code dari sistem, dia akan melakukan validasi terhadap Content-Type tersebut dan hanya menerima jika content-type bertipe image/png.

Saya jadi termenung, bagaimana jika kita mampu mengubah content type? bagaimana jika saya mampu mengupload kode deface saya dan berpura pura sebagai gambar padahal dia adalah kode?

HMMM SUSSS

Sekarang mari kita buka burpsuite kembali dan coba untuk mengubah content type dari kode deface kita sebagai image/png. Dugaan saya, karena source hanya melakukan pengecekan dari content-type maka saya dapat menyelundupkan kode deface saya dengan content type image/png.

Dan BOOM hasilnya ternyata berhasil di bypass dan saya mampu mengupload kode jahat saya. 🙈

Dan berikut merupakan hasilnya

Pwned!!!!

Mitigasi

Seperti yang sudah kita lakukan analisis sebelumnya, kita melihat bahwa terdapat celah pada source code karena hanya melakukan validasi pada content-type saja. Seharusnya server melakukan validasi terhadap extension dari file dan melakukan restricted hanya pada extension yang dibolehkan

Jika kita mengacu pada Mitigasi yang dilakukan oleh OWASP terhadap Unrestricted File Upload maka berikut beberapa hal lain yang setidaknya bisa kita lakukan :

1. File Extensions Validation (melakukan validasi pada file extension, hal ini supaya tidak bisa dibypass dengan mudah dengan cara mengubah content-type header seperti yang kita lakukan tadi). Server akan mengecek apakah ekstensi dari file yang diupload benar yang diperbolehkan seperti pada kasus ini jpg,png, dan gambar lainnya.
2. Content-Type Header Validation
3. File Type Detector
4. dan lain lain

Penutup, sekian dan terima kasih. Stay Curious!

--

--