apa yang terjadi jika Anda tidak dapat melihat atau memanipulasi kode tersebut? Nah, itulah filter sisi server. Singkatnya, kita harus melakukan banyak pengujian untuk membangun ide tentang apa yang diizinkan atau tidak diizinkan melalui filter, lalu secara bertahap menyusun payload yang sesuai dengan batasan.
situs web yang menggunakan daftar hitam untuk ekstensi file sebagai filter sisi server. Ada berbagai cara berbeda untuk mengkodekannya, dan jalan pintas yang kita gunakan bergantung pada hal itu. Di dunia nyata, kita tidak akan dapat melihat kode untuk ini, tetapi untuk contoh ini, kode tersebut akan disertakan di sini:
//Get the extension
$extension = pathinfo($_FILES["fileToUpload"]["name"])["extension"];
//Check the extension against the blacklist -- .php and .phtml
switch($extension){
case "php":
case "phtml":
case NULL:
$uploadFail = True;
break;
default:
$uploadFail = False;
}
?>
Dalam contoh ini, kode mencari titik terakhir (
Kita dapat melihat bahwa kode tersebut menyaring ekstensi
Ini sebenarnya merupakan default untuk server Apache2, pada saat penulisan; namun, sysadmin mungkin telah mengubah konfigurasi default (atau server mungkin sudah kedaluwarsa), jadi patut dicoba.
Akhirnya kami menemukan bahwa .pharekstensi tersebut melewati filter -- dan berfungsi -- sehingga memberi kami shell:
Mari kita lihat contoh lain, dengan filter yang berbeda. Kali ini kita akan melakukannya secara black-box: yaitu tanpa kode sumber.
Sekali lagi, kami memiliki formulir unggah:
Oke, kita akan mulai dengan menyelidiki hal ini dengan unggahan yang sepenuhnya sah. Mari kita coba mengunggah gambar
Nah, itu memberi tahu kita bahwa JPEG diterima setidaknya. Mari kita pilih yang kita yakin akan ditolak (
Dalam kasus ini kami menemukan bahwa tidak ada ekstensi shell yang dieksekusi, dan tidak difilter, jadi kembali ke papan gambar.
Dalam contoh sebelumnya kita melihat bahwa kode tersebut menggunakan fungsi
Mari kita coba mengunggah file bernama
Saat kami mencoba mengunggah berkas, kami mendapat pesan berhasil. Menavigasi ke direktori
Dengan mengaktifkannya, kita menerima shell kita:
Ini bukanlah daftar lengkap kerentanan unggahan yang terkait dengan ekstensi file. Seperti halnya semua hal dalam peretasan, kita berupaya mengeksploitasi kelemahan dalam kode yang ditulis orang lain; kode ini mungkin saja ditulis secara unik untuk tugas yang sedang dikerjakan. Ini adalah poin yang sangat penting untuk diambil dari tugas ini: ada sejuta cara berbeda untuk mengimplementasikan fitur yang sama dalam hal pemrograman -- eksploitasi Anda harus disesuaikan dengan filter yang sedang dikerjakan. Kunci untuk melewati semua jenis filter sisi server adalah dengan menghitung dan melihat apa yang diizinkan, serta apa yang diblokir; kemudian mencoba membuat payload yang dapat melewati kriteria yang dicari oleh filter.