เราได้กล่าวถึงการหาประโยชน์จากXSS สองประเภท แล้ว: สะท้อนกลับ และ จัดเก็บ พวกมันทั้งหมดมีคุณสมบัติทั่วไปที่โค้ดอันตรายหลังจากถูกแทรกจะถูกดำเนินการหลังจากการตอบกลับของเซิร์ฟเวอร์ซึ่งหมายความว่าข้อผิดพลาดจะอยู่ที่ฝั่งเซิร์ฟเวอร์ เซิร์ฟเวอร์ เซิร์ฟเวอร์ มีการแสวงหาผลประโยชน์ XSS อีกประเภทหนึ่งที่ขัดแย้งกับฟีเจอร์นี้ โค้ดที่เป็นอันตรายจะถูกดำเนินการทันทีบนฝั่งไคลเอ็นต์โดยไม่ต้องผ่านเซิร์ฟเวอร์ หรือที่เรียกว่า XSS ที่ใช้ DOM หรือที่รู้จักในชื่อ XSS ประเภท 0
ก่อนอื่นเราต้องรู้ว่า DOM คืออะไร?
DOM ย่อมาจาก Document Object Model เป็นรูปแบบมาตรฐานของ W3C (http://www.w3.org/DOM/) ที่เสนอให้ดึงและจัดการข้อมูลของเอกสารที่มีโครงสร้าง เช่น HTML และ XML แบบจำลองนี้แสดงเอกสารเป็นโครงสร้างต้นไม้แบบลำดับชั้น องค์ประกอบทั้งหมดใน HTML และ XML ถือเป็นโหนด
DOM Based XSS เป็นเทคนิคการหาประโยชน์จาก XSS โดยอาศัยการเปลี่ยนแปลงโครงสร้าง DOM ของเอกสาร โดยเฉพาะ HTML
ลองดูตัวอย่างเฉพาะด้านล่าง:
เว็บไซต์มี URL ต่อไปนี้ไปยังหน้าการลงทะเบียน:
example.com/register.php?message=Please fill in the form
เมื่อเราเข้าถึงมัน เราเห็นรูปแบบปกติมาก:
คุณสามารถอนุมานพารามิเตอร์ข้อความที่ส่งไปยังเนื้อหาการแจ้งเตือนในแบบฟอร์มได้อย่างง่ายดาย โดยดูซอร์สโค้ดของการแจ้งเตือนนี้อย่างละเอียด:
เซ็กเมนต์ JavaScript มีหน้าที่รับค่าจากพารามิเตอร์ข้อความและพิมพ์ออกมา จากการตรวจสอบอินพุตที่หละหลวมนี้ คุณสามารถหลอกผู้ใช้ให้เข้าถึง URL ที่เป็นอันตรายได้โดยสิ้นเชิง
แทนที่จะแคสต์:
message=Please fill in the form
จากนั้นส่ง:
message=GenderMaleFemale
function show(){alert();}
จากนั้นแบบฟอร์มลงทะเบียนจะมีลักษณะดังนี้:
ผู้ใช้จะไม่สงสัยในรูปแบบ "ปกติ" เช่นนี้ และเมื่อเลือกเพศ สคริปต์จะถูกดำเนินการ:
ฉันจะอธิบายเพิ่มเติมอีกเล็กน้อยเกี่ยวกับค่าที่ส่งในพารามิเตอร์ข้อความ:
GenderMaleFemale
function show(){alert();}
วัตถุประสงค์หลักคือเพื่อรันฟังก์ชัน show() ทุกครั้งที่มีเหตุการณ์ onchage บนแท็ก select ฟังก์ชัน show() ที่นี่จะปรากฏขึ้นมาเพื่อแสดงว่าสคริปต์ได้ถูกดำเนินการแล้ว อย่างไรก็ตาม ในความเป็นจริงแฮกเกอร์มักจะใช้ฟังก์ชัน show() นี้เพื่อรันสคริปต์ที่ส่งค่าคุกกี้ของผู้ใช้ไปยังเซิร์ฟเวอร์ที่กำหนดไว้ล่วงหน้า ผู้อ่านสามารถอ่านบทความReflected XSSซึ่งกล่าวถึงวิธีที่แฮกเกอร์สร้างคำขอนี้มีลักษณะอย่างไร
ตัวอย่างนี้ให้ข้อสรุปที่สำคัญสองประการแก่เรา ประการแรก โค้ดที่เป็นอันตรายจะถูกดำเนินการทันทีเมื่อคลิกที่ค่าในแท็ก select ซึ่งหมายความว่าโค้ดดังกล่าวจะถูกดำเนินการทางฝั่งไคลเอ็นต์โดยไม่ต้องผ่านการตอบสนองของเซิร์ฟเวอร์ ประการที่สอง โครงสร้าง HTML มีการเปลี่ยนแปลงตามสคริปต์ที่ส่งผ่าน และเรายังเห็นสถานการณ์การหาประโยชน์ที่เกิดขึ้นจริงอีกด้วย โดย DOM Based นั้นค่อนข้างคล้ายกับ Reflected มากกว่า Stored XSS เมื่อพูดถึงการหลอกให้ผู้ใช้เข้าถึง URL ที่ฝังอยู่กับโค้ดที่เป็นอันตราย
รูปต่อไปนี้อธิบายแต่ละขั้นตอนในการใช้เทคนิคการโจมตี XSS ที่ใช้ DOM:
ด้านล่างนี้เป็นวิดีโอของสมาชิกของฟอรัม WhiteHat.vn ที่กำลังหาประโยชน์ผ่าน XSS ที่ใช้ DOM:
ขอให้โชคดี!