Upload Vulnerabilities - Bypassing Server-Side Filtering: Magic Numbers


Magic Numbers: Magic Numbers adalah serangkaian digit heksadesimal yang muncul di awal file dan digunakan untuk mengidentifikasi jenis file secara lebih akurat. list of file signatures on Wikipedia

Validasi File: Server dapat memeriksa beberapa byte pertama file yang diunggah dan membandingkannya dengan daftar Magic Numbers yang diperbolehkan untuk memvalidasi jenis file tersebut. sebagai contoh kita meguploads file jpeg jadi mari kita pilih satu saja ( FF D8 FF DB ). Kita dapat menambahkan representasi ASCII dari digit ini (ÿØÿÛ) langsung di bagian atas file.

Implementasi di Server: Metode ini sering digunakan di server web berbasis PHP untuk mencegah unggahan file berbahaya seperti skrip PHP yang disamarkan sebagai file gambar atau dokumen.

Bypassing Filter: Dengan menambahkan Magic Numbers file yang valid (misalnya Magic Numbers JPEG) di bagian atas file berbahaya (seperti skrip PHP), filter Server-Side dapat dikelabui untuk mengidentifikasi file tersebut sebagai jenis file yang sah.

Sebelum kita memulai, mari kita gunakan perintah Linux file untuk memeriksa jenis file shell kita:


Seperti yang diharapkan, perintah tersebut memberi tahu kita bahwa tipe file adalah PHP.
Kita dapat melihat bahwa Magic Numbers yang kita pilih panjangnya empat byte, jadi mari kita buka skrip shell terbalik dan tambahkan empat karakter acak pada baris pertama.
Karakter-karakter ini tidak penting, jadi untuk contoh ini kita hanya akan menggunakan empat "A":

Simpan berkas dan keluar. Selanjutnya kita akan membuka kembali berkas tersebut hexeditor(yang merupakan bawaan Kali), atau alat lain yang memungkinkan Anda melihat dan mengedit shell sebagai hex. Dalam hexeditor, berkas tersebut tampak seperti ini:
. hexeditor [filename]

Perhatikan empat byte dalam kotak merah: semuanya adalah 41, yang merupakan kode hex untuk huruf kapital "A" -- persis apa yang kita tambahkan di bagian atas berkas sebelumnya.
Ubah ini ke angka ajaib yang kita temukan sebelumnya untuk file JPEG:FF D8 FF DB

Sekarang jika kita simpan dan keluar dari berkas (Ctrl + x), kita dapat menggunakannya file sekali lagi, dan melihat bahwa kita telah berhasil memalsukan tipe berkas shell kita:

Sempurna. Sekarang mari kita coba mengunggah shell yang dimodifikasi dan lihat apakah shell tersebut melewati filter!

File shell PHP standar yang ditolak saat diunggah bisa lolos filter jika Magic Numbers JPEG ditambahkan di awal file, karena filter hanya memeriksa Magic Numbers tanpa menganalisis keseluruhan konten file.
Kesimpulan: Teknik ini menunjukkan bahwa meskipun Magic Numbers bisa efektif, penyaringan yang hanya mengandalkan angka ajaib bisa diakali, sehingga perlu pendekatan keamanan tambahan untuk mencegah unggahan file berbahaya.


Lewati filter Magic Numbers untuk mengunggah shell. Temukan lokasi shell yang diunggah dan aktifkan. Bendera Anda ada di /var/www/.

.echo "10.10.140.184 http://magic.uploadvulns.thm" | sudo tee -a /etc/hosts
- Agar bisa di access menggunakan domain.
.gobuster dir -u http://magic.uploadvulns.thm -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
- Scanning path directory

setelah uploads extension .php ditolak mari kita ubah extension menjadi .gif
. file [filename]

perintah tersebut memberi tahu kita bahwa tipe file adalah PHP
mari kita rubah dengan menambahkan huruf C di awal script
. nano [filename]

. file [filename]

merubah extension file tersebut menjadi .gif list of file signatures on Wikipedia
number signature .gif
. hexeditor [filename]

. file [filename]

baik sudah sesuai mari uploads file tersebut, sebelum uploads jangan lupa untuk memulai netcat untuk listening
. nc -lvnp 1234
setelah kita berhasil uploads panggil file yang kita uploads dan hasil dari gobuster