การทดสอบการเขียนสคริปต์ข้ามไซต์
Cross-site Scripting (XSS) เกิดขึ้นเมื่อใดก็ตามที่แอปพลิเคชันรับข้อมูลที่ไม่น่าเชื่อถือและส่งไปยังไคลเอนต์ (เบราว์เซอร์) โดยไม่มีการตรวจสอบความถูกต้อง สิ่งนี้ช่วยให้ผู้โจมตีสามารถเรียกใช้สคริปต์ที่เป็นอันตรายในเบราว์เซอร์ของเหยื่อซึ่งอาจส่งผลให้เซสชันของผู้ใช้ถูกแย่งชิงเว็บไซต์ทำให้เว็บไซต์เสียชื่อเสียงหรือเปลี่ยนเส้นทางผู้ใช้ไปยังไซต์ที่เป็นอันตราย
ขอให้เราเข้าใจตัวแทนภัยคุกคามผู้โจมตีจุดอ่อนด้านความปลอดภัยผลกระทบทางเทคนิคและผลกระทบทางธุรกิจของข้อบกพร่องนี้ด้วยความช่วยเหลือของแผนภาพง่ายๆ
ประเภทของ XSS
Stored XSS - XSS ที่เก็บไว้หรือที่เรียกว่า XSS ถาวรจะเกิดขึ้นเมื่อข้อมูลของผู้ใช้ถูกเก็บไว้บนเซิร์ฟเวอร์เป้าหมายเช่นฐานข้อมูล / ฟอรัมข้อความ / ช่องแสดงความคิดเห็นเป็นต้นจากนั้นเหยื่อจะสามารถดึงข้อมูลที่จัดเก็บจากเว็บแอปพลิเคชันได้
Reflected XSS - XSS ที่สะท้อนหรือที่เรียกว่า XSS แบบไม่ต่อเนื่องเกิดขึ้นเมื่อการป้อนข้อมูลของผู้ใช้ถูกส่งกลับทันทีโดยเว็บแอปพลิเคชันในข้อความแสดงข้อผิดพลาด / ผลการค้นหาหรือข้อมูลที่ผู้ใช้ให้ไว้เป็นส่วนหนึ่งของคำขอและไม่มีการจัดเก็บข้อมูลที่ผู้ใช้ให้ไว้อย่างถาวร
DOM Based XSS - DOM Based XSS เป็นรูปแบบหนึ่งของ XSS เมื่อแหล่งที่มาของข้อมูลอยู่ใน DOM ซิงก์ก็อยู่ใน DOM เช่นกันและกระแสข้อมูลจะไม่ออกจากเบราว์เซอร์
ตัวอย่าง
แอปพลิเคชันใช้ข้อมูลที่ไม่น่าเชื่อถือในการก่อสร้างโดยไม่มีการตรวจสอบความถูกต้อง อักขระพิเศษควรจะหนี
http://www.webpage.org/task/Rule1?query=try
ผู้โจมตีแก้ไขพารามิเตอร์การสืบค้นในเบราว์เซอร์ของตนเป็น -
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
Hands ON
Step 1- เข้าสู่ระบบ Webgoat และไปที่ส่วน cross-site scripting (XSS) ให้เราทำการโจมตีแบบ Stored Cross-site Scripting (XSS) ด้านล่างนี้คือภาพรวมของสถานการณ์
Step 2- ตามสถานการณ์ให้เราเข้าสู่ระบบในฐานะทอมด้วยรหัสผ่าน 'ทอม' ตามที่กล่าวไว้ในสถานการณ์นั้นเอง คลิก 'ดูโปรไฟล์' และเข้าสู่โหมดแก้ไข เนื่องจากทอมเป็นผู้โจมตีให้เราฉีดสคริปต์ Java ลงในกล่องแก้ไขเหล่านั้น
<script>
alert("HACKED")
</script>
Step 3 - ทันทีที่การอัปเดตสิ้นสุดลงทอมจะได้รับกล่องแจ้งเตือนพร้อมข้อความ "แฮ็ก" ซึ่งหมายความว่าแอปมีช่องโหว่
Step 4 - ตามสถานการณ์เราจำเป็นต้องล็อกอินเป็นเจอร์รี่ (HR) และตรวจสอบว่าเจอร์รี่ได้รับผลกระทบจากสคริปต์ที่ฉีดเข้าไปหรือไม่
Step 5 - หลังจากเข้าสู่ระบบในฐานะเจอร์รี่แล้วให้เลือก "ทอม" และคลิก "ดูโปรไฟล์" ตามที่แสดงด้านล่าง
ในขณะที่ดูโปรไฟล์ของทอมจากบัญชีของเจอร์รี่เขาสามารถรับกล่องข้อความเดียวกันได้
Step 6 - กล่องข้อความนี้เป็นเพียงตัวอย่าง แต่ผู้โจมตีจริงสามารถดำเนินการได้มากกว่าการแสดงกล่องข้อความ
กลไกการป้องกัน
นักพัฒนาต้องตรวจสอบให้แน่ใจว่าพวกเขาหลีกเลี่ยงข้อมูลที่ไม่น่าเชื่อถือทั้งหมดตามบริบท HTML เช่นเนื้อหาแอตทริบิวต์ JavaScript CSS หรือ URL ที่ใส่ข้อมูลลงไป
สำหรับแอปพลิเคชันที่ต้องการอักขระพิเศษเป็นอินพุตควรมีกลไกการตรวจสอบความถูกต้องก่อนที่จะยอมรับว่าเป็นอินพุตที่ถูกต้อง