บทความนี้จะแนะนำหลักการและวิธีแก้ไขช่องโหว่การอัปโหลดไฟล์ chr(0) ของ ASP เป็นหลัก ช่องโหว่ chr(0) สามารถข้ามการตรวจสอบส่วนขยายได้เมื่ออัปโหลดไฟล์ ซึ่งเป็นช่องโหว่ที่อันตรายมาก
เมื่อเราใช้ ASP เพื่อพัฒนาฟังก์ชันการอัพโหลดไฟล์ เพื่อป้องกันไม่ให้ผู้ใช้อัพโหลดโปรแกรมโทรจัน เรามักจะจำกัดการอัพโหลดไฟล์บางไฟล์ วิธีการทั่วไปคือการพิจารณาว่านามสกุลของไฟล์ที่อัพโหลดนั้นเป็นไปตามกฎระเบียบที่คุณสามารถใช้ได้หรือไม่ ฟังก์ชันสตริงที่ถูกต้องในการดึงข้อมูลไฟล์ที่อัพโหลดสามารถระบุตัวเลขสี่หลักสุดท้ายได้อย่างง่ายดาย แต่มีช่องโหว่อยู่ซึ่งเป็นอันตรายมากและเป็นช่องโหว่ chr(0) โปรดอ่านต่อ รายละเอียด.
1. ก่อนอื่น ให้อธิบายว่า ch(0) คืออะไร?
ใน ASP คุณสามารถใช้ฟังก์ชัน chr() เพื่อเรียกโค้ด ASCII โดยที่ chr(0) หมายความว่าการโทรเป็นอักขระสิ้นสุด (0) สามารถส่งออกได้ อักขระที่อยู่หลัง ch(0) จะไม่ถูกส่งออก ยกตัวอย่างเพื่อแสดงให้เห็น:
คัดลอกรหัสรหัสดังต่อไปนี้:
<%response.write "HTMer.com"&chr(0)&"ยินดีต้อนรับ"%>
หากคุณเรียกใช้โค้ดด้านบนภายใต้ IIS มันจะส่งออกเฉพาะ "HTMer.com" หรือไม่ "ยินดีต้อนรับ" ต่อไปนี้หายไป เนื่องจากเมื่ออ่าน chr(0) คำสั่งจะถือว่าสิ้นสุดแล้ว
2. หลักการอัปโหลดช่องโหว่ Chr(0):
สมมติว่าฉันได้ตั้งค่าโปรแกรม ASP ให้อัปโหลดเฉพาะไฟล์ jpg นี่คือวิธีที่ฉันใช้ช่องโหว่ chr(0) เพื่ออัปโหลด ASP Trojan:
สมมติว่ามีไฟล์ ASP Trojan ชื่อ htmer.asp ฉันเปลี่ยนชื่อเป็น htmer.asp .jpg เมื่อเราได้รับชื่อไฟล์ พื้นที่นี้จะถือเป็น chr(0) เมื่อเราใช้ right("htmer.asp .jpg",4) เพื่อดูไฟล์ มันจะเป็น .jpg จริงๆ แต่เมื่อเราอ่าน htmer.asp จริงๆ jpg และเมื่อสร้างไฟล์ ระบบจะคิดว่ามันสิ้นสุดเมื่ออ่าน chr(0) ดังนั้นจึงไม่สามารถส่งออกไฟล์ .jpg ที่ตามมาได้ ชื่อไฟล์ที่อัปโหลดจะถูกสร้างขึ้นโดยอัตโนมัติเป็น htmer.asp ฉันคิดว่าคุณควรรู้
3. วิธีการแก้ไขช่องโหว่ chr(0)
วิธีแก้ไขคือการตรวจสอบว่ามี chr(0) ในชื่อไฟล์ที่อัพโหลดหรือไม่ และแทนที่อักขระ chr(0) โดยตรงด้วยฟังก์ชันการแทนที่ใน ASP