Upload Vulnerabilities - Methodology & Challenge


Enumerasi Lingkungan

Memahami lingkungan situs web adalah langkah awal yang krusial. Gunakan alat seperti Wappalyzer untuk mengidentifikasi teknologi yang digunakan, seperti bahasa pemrograman, kerangka kerja, dan server. Periksa Source code halaman untuk menemukan filter Client-side yang mungkin diterapkan, misalnya pembatasan pada extension file atau tipe MIME.


Identifikasi Lokasi File yang Diunggah

Setelah menemukan halaman unggah, gunakan alat seperti Gobuster untuk memindai direktori dan menemukan lokasi file yang diunggah. Ini membantu Anda memahami bagaimana file diakses setelah diunggah, apakah secara langsung atau melalui halaman lain.


Analisis Upload Request

Gunakan Burpsuite untuk menyadap dan menganalisis Upload Request. Ini memberi wawasan tentang bagaimana situs menangani Upload file dan apakah ada filter server-side yang harus dihadapi.


Eksperimen dengan Upload

Coba Upload berbagai jenis file, dimulai dengan file yang tidak berbahaya, untuk melihat bagaimana file tersebut diakses dan apakah ada filter yang diterapkan. Jika file dapat diunggah, periksa apakah file tersebut dapat diakses langsung atau melalui metode lain. Jika unggahan file berbahaya ditolak, pesan kesalahan yang muncul dapat memberikan petunjuk tentang filter yang digunakan.


Identifikasi dan Melewati Filter Server-side:

. Filter Extension Uji dengan mengunggah file yang memiliki extension tidak valid untuk melihat apakah server menggunakan Blacklist atau whitelist extension file.
. Filter Berdasarkan Magic Numbers Ubah Magic Numbers file yang diterima untuk menentukan apakah server menyaring file berdasarkan tanda tangan file.
. Filter Berdasarkan Tipe MIME Ubah tipe MIME dari file yang tidak berbahaya untuk menguji apakah server menyaring berdasarkan tipe MIME.
. Filter Panjang File Uji batas panjang file dengan mengunggah file yang semakin besar hingga mencapai batas filter panjang file yang diterapkan oleh server.

Pendekatan ini memungkinkan Anda untuk mengidentifikasi dan melewati berbagai jenis filter yang mungkin diterapkan pada unggahan file di sisi server, sehingga membuka peluang untuk memanfaatkan titik uploads file di situs web.



Kunjungi jewel.uploadvulns.thm
Ambil apa yang telah Anda pelajari di ruangan ini dan gunakan untuk mendapatkan shell pada mesin ini. Seperti biasa, bendera Anda ada di /var/www/. Ingatlah bahwa tantangan ini akan menjadi akumulasi dari semua yang telah Anda pelajari sejauh ini, jadi mungkin ada beberapa filter yang harus dilewati. Daftar kata terlampir mungkin membantu. Ingat juga bahwa tidak semua server web memiliki backend PHP

Agar bisa di access menggunakan Domain
. echo "10.10.98.141 jewel.uploadvulns.thm" | sudo tee /etc/hosts


Scan directory menggunakan gobuster
. gobuster dir -u http://jewel.uploadvulns.thm/ -w /usr/share/wordlists/dirb/big.txt -t 250

Pertama, kita dapat melihat kode sumber situs tersebut.

sebagian besar kode berasal dari folder bernama " assets ". Jika kita kembali ke halaman utama dan menggunakan alat bernama " Wappalyzer ", maka akan ada beberapa informasi yang diberikan.

Ia memberi tahu kita bahwa ia ditulis dalam Node.js dan menggunakan Express framework. Sekarang, kita dapat kembali ke pemindaian Gobuster dan melihat bahwa ia telah mengidentifikasi beberapa direktori, /modules, /Content, /assets, /admin. Halaman "/content" tampaknya menjadi tempat penyimpanan sebagian besar gambar atau konten di situs itu sendiri. Untuk memeriksa apakah gambar dihosting di direktori /content tersebut, kita dapat menggunakan "Inspect Element" di Firefox untuk melihat dari mana gambar latar belakang berasal.

pemeriksaan Source Code untuk gambar latar belakang menunjukkan bahwa gambar tersebut berasal dari " /content/SAD.jpg ". Hal ini juga tampak seperti skema penamaan acak yang diterapkan oleh kode server-side. Kita dapat memeriksa dan menemukan semua gambar JPEG yang dihosting di direktori konten tersebut dengan melakukan pemindaian Gobuster lain menggunakan daftar kata yang disediakan.
. gobuster dir -u http://jewel.uploadvulns.thm/content -w UploadVulnsWordlist.txt -t 250 -x jpg -s 200,301,302

kita dapat memeriksa halaman " /admin " karena tampaknya menarik.

halaman ini kemungkinan besar adalah tempat kita dapat mengeksekusi shell karena Node.js TIDAK akan mengizinkan Anda menavigasi ke sana seperti PHP.
Langkah selanjutnya adalah mencoba dan mengunggah shell. Mengetahui bahwa shell tersebut menjalankan Node.js , kita dapat menemukan muatan reverse shell Node.js dari sini.

Berikutnya, kita cukup menyalin kode dari GitHub ke dalam file .js dan mengubah alamat IP dan nomor port ke IP TryHackMe Anda dan port acak (saya menggunakan 8080 ).

Sekarang, kita dapat mencoba mengunggah shell mentah ini dalam formulir unggah. Jika kita melakukannya, kita akan mendapatkan kesalahan.

Saat ini, kami tidak tahu apakah ini filter client-side atau server-sid . Kami dapat memeriksa client-side menggunakan BurpSuite dengan mencegat penyegaran penuh halaman utama sambil mencegat berkas JavaScript juga (ingat untuk mengubah aturannya meghapus "^.js$|^")

Setelah "^.js$|^" dihapus, cukup segarkan halaman sepenuhnya ( CTRL+F5 ) dan Intercept file. Kami ingin mencoba dan mengidentifikasi filter apa pun yang diterapkan. Ini kemungkinan besar akan berada dalam file JS terpisah. Dengan meneruskan beberapa permintaan, kami mendapatkan permintaan GET untuk skrip " upload.js ".

klik kanan dan masuk ke menu " Do intercept " lalu centang " Response to the request " untuk menyadap tanggapan server terhadap permintaan ini.

Jika masih gagal coba lakukan juga di GET / HTTP/1.1
Setelah selesai, teruskan saja semua paket lainnya hingga Anda mencapai respons. Respons ini berisi kode lengkap untuk skrip upload.js . Seperti yang Anda lihat, berkas ini memiliki tiga filter - File Size , Magic Number , dan pengecekan File Extension.

Hapus saja semua ini dari permintaan dan Forward. Ini seharusnya menghapus semua filter Client-side untuk unggahan.

Sekali lagi, kita dapat mencoba mengunggah file shell.js. Sayangnya, kita mendapatkan kesalahan yang sama - ini menunjukkan bahwa ada juga beberapa filter server-side yang diterapkan.
Filter yang sangat sederhana dapat berupa pemeriksaan tipe MIME. Jika kita mencoba mengubah nama file dari " shell.js " menjadi " shell.jpg " dan mengunggah JPG.
. cp shell.js shell.jpg

file tersebut berhasil diunggah

Jika Anda ingat kembali, kami melakukan pemindaian untuk mengidentifikasi semua gambar JPG di server. Melihat kembali hasil ini, kami melihat bahwa ada 4 gambar dengan nama file 3 huruf yang tampaknya dibuat secara acak

Jika kita menjalankan pemindaian yang sama lagi dan membandingkan hasilnya, kita akan melihat 5 gambar kali ini, yang menunjukkan bahwa " shell.jpg " kita berhasil diunggah dan diganti nama menjadi " SSC.jpg "

Sekarang kita tahu di mana file tersebut berada ( /content ) dan file tersebut telah diunggah ( SSC.jpg ) kita dapat mencoba menavigasi ke sana dan melihat apakah file tersebut ada di sana

Ini memberi kita kesalahan karena itu bukan berkas JPG tetapi ini mengonfirmasi bahwa berkas berhasil diunggah dan ada di server setelah melewati semua filter.
Untuk menjalankan reverse shell ini secara penuh, pertama-tama kita perlu mengatur listener netcat ( nc -nvlp 8080 ) ke port mana pun yang Anda tentukan di shell Node.js beberapa waktu lalu
. nc -nvlp 8080
jika port tersebut sudah di gunakan, ganti di script shell.jpg lalu uploads kembali dan jagan lupa untuk scan file meggunakan gobuster

Lalu, jika Anda ingat halaman /admin, kita dapat menjalankan modul dari direktori modul. Untuk melewatinya, kita dapat menggunakan sedikit terminologi Linux untuk masuk ke satu direktori lalu ke direktori /contents dan menjalankan shell jahat kita.

Setelah kita menekan enter dan kembali ke netcat kita.