Artikel ini terutama memperkenalkan prinsip dan solusi kerentanan pengunggahan file chr(0) ASP. Kerentanan chr(0) dapat melewati verifikasi ekstensi saat mengunggah file
Saat kami menggunakan ASP untuk mengembangkan fungsi pengunggahan file, untuk mencegah pengguna mengunggah program Trojan, kami sering membatasi pengunggahan beberapa file. Metode yang umum adalah menentukan apakah ekstensi file yang diunggah memenuhi peraturan fungsi string yang tepat untuk mengambil file yang diunggah. Empat digit terakhir dari nama file dapat dengan mudah ditentukan, tetapi ada kerentanan di dalamnya, yang sangat berbahaya, dan itu adalah kerentanan chr(0). detail.
1. Pertama, jelaskan apa itu chr(0)?
Di ASP, Anda dapat menggunakan fungsi chr() untuk memanggil kode ASCII, di mana chr(0) berarti panggilan tersebut adalah karakter akhir. Sederhananya, ketika sebuah string berisi karakter chr(0), hanya bagian depan chr (0) dapat berupa karakter keluaran, karakter setelah chr(0) tidak akan dikeluarkan. Berikan contoh untuk menggambarkan:
Copy kode kodenya sebagai berikut:
<%response.write "HTMer.com"&chr(0)&"Selamat datang"%>
Jika Anda menjalankan kode di atas pada IIS, apakah hanya akan menampilkan "HTMer.com"? Kalimat “Selamat Datang” berikut ini hilang, karena ketika chr(0) dibaca, pernyataan dianggap telah berakhir.
2. Prinsip pengunggahan kerentanan Chr(0):
Asumsikan saya telah menyiapkan program ASP untuk hanya mengunggah file jpg. Berikut adalah cara saya menggunakan kerentanan chr(0) untuk mengunggah Trojan ASP:
Asumsikan di sini ada file Trojan ASP bernama htmer.asp. Saya menamainya htmer.asp .jpg. Apakah Anda melihat spasi di tengahnya? Ketika kita mendapatkan nama file, spasi ini dianggap chr(0). Ketika kita menggunakan right("htmer.asp .jpg",4) untuk melihatnya, itu memang .jpg, tetapi ketika kita benar-benar membaca htmer.asp . jpg, dan ketika membuat file, sistem menganggapnya sudah selesai ketika membaca chr(0), sehingga .jpg berikutnya tidak dapat ditampilkan. Nama file yang diunggah secara otomatis dibuat sebagai htmer.asp. Saya pikir Anda harus mengetahuinya.
3. Metode untuk mengatasi kerentanan chr(0).
Solusinya adalah dengan mengecek apakah ada chr(0) pada nama file yang diupload, dan langsung mengganti karakter chr(0) dengan fungsi replace di ASP.