Cross-site Scripting (XSS) ก็เป็นอีกเทคนิคที่ แฮกเกอร์ชอบใช้เป็นประจำ โดยแฮกเกอร์ใช้ web application เพื่อส่ง client-side script เช่น Javascript เป็นต้นไปทำงานที่เว็บบราวเซอร์ของเหยื่อเพื่อทำงานตามที่แฮกเกอร์ ต้องการ ช่องโหว่ที่สามารถทำให้เกิดการ XSS ได้ก็เนื่องมาจาก web application รับข้อมูลเข้ามาจากผู้ใช้ ซึ่งโปรแกรมเมอร์ที่พัฒนา web application ดังกล่าวไม่ได้ทำการตรวจสอบความถูกต้องของข้อมูลนั้น แล้วนำข้อมูลดังกล่าวไปแสดงบนเว็บเพจ แม้ว่าแฮกเกอร์ไม่สามารถใช้ XSS ในการทำอันตรายเครื่องคอมพิวเตอร์ที่ตกเป็นเหยื่อย เช่นสั่งฟอร์แมต Harddisk หรือทำ remote conrol ได้เพราะว่ากลไกการทำงานของ client-side script ไม่อนุญาตให้ทำงานดังกล่าว แต่ความน่ากลัวของ XSS มีอยู่ไม่น้อยเนื่องจาก XSS ยังเป็นช่องทางที่ทำให้ Hacker สามาถ ขโมย Cookie ซึ่งอาจจะทำให้ hacker ใช้ cookie เพื่อใช้ในการแย่ง session ของเหยื่อได้ หรือ แก้ข้อมูลของ form ที่ใช้ในการกรอก username/password ให้ส่งไปยังเครื่องของ hacker ก่อนแล้วค่อยส่งไปยังเว็บไซต์จริง ๆ หรือแก้ไขข้อมูลที่แสดงอยู่บนเว็บเพจเพื่อหลอกให้เหยื่อหลงเชื่อแล้วทำให้ เหยื่อทำอะไรบางอย่างที่เป็นผลดีต่อแฮกเกอร ซึ่งวิธีการโจมตีแบบ XSS อาจจะแบ่งได้เป็น 2 ประเภทคือ
เรามาลองศึกษาดูกันดีกว่าว่า Cross-site Scripting ทำกันอย่างไร ซึ่งผมจะทำโจมตีแบบ Reflected XSS โดยเว็บเป้าหมายที่เราจะทำการทดลองในวันนี้ก็คือ www.sanook.com หมายเหตุ: ทำการทดลอง ณ วันที่ 4 พฤศจิกายน 2550 ซึ่งหลังจากที่พบช่องโหว่ผมก็ได้แจ้ง sanook.com ให้แก้ไขช่องโหว่นี้แล้ว ทำให้ผลลัพธ์ที่ได้จากการกดลิงก์ต่าง ๆ ด้านล่างไม่ตรงกับรูปภาพที่แสดง เครื่องมือที่ต้องใช้
ขั้นตอนการทดลอง
โดย URL ด้านล่างก็ืคือ URL ที่ใช้แสดงข้อความผิดพลาดซึ่งมีการส่งข้อมูล แบบ url encode ด้วย
http://www.sanook.com/?smistatuscode=0&smierrormessage=%E0%B9%84%E0%B8%A1%E0%B9%88
กดปุ่ม URL decode จะได้ผลลัพธ์ดังรูปด้านล่าง
พบว่าข้อความที่ถูกส่งมาทางตัวแปร "smierrormessage" เป็นข้อมความเดียวกับที่แสดงใน Alert Box จึงลองดู HTML source พบว่ามีการเรียกคำสั่ง javascript แบบ in-line เพื่อแสดง Alert Box
ทดลองทำ Code Injection โดยเปลี่ยนค่าที่ส่งให้ตัวแปร "smierrormessage" จาก "ไม่พบอีเมล์นี้ในระบบ" เป็น Welcome to sanook.com");document.write("<h1>XSS Attack</h1>")("ซึ่งจะทำให้ in-line javascript เปลี่ยนจาำก alert("ไม่พบอีเมล์นี้ในระบบ"); เป็นซึ่ง Javascript ดังกล่าวจะเปลี่ยนข้อความใน Alert Box จาก "ไม่พบอีเมล์นี้ในระบบ" เป็น "Welcome to sanook.com" แทน แล้วยังเขียนคำว่า "XSS Attack" เพิ่มลงไปในหน้าเพจอีกด้วย
กด ปุ่ม URL encode เพื่อให้ได้ URL ที่ encode ตัวอักษรพิเศษ
ซึ่งจะได้ URL ด้านล่าง: หรือถ้าจะให้แยบยลกว่านั้นเราก็ต้องทำ url encode ทุกตัวอักษรซึ่งจะได้ URL นี้: ผลลัพธ์ที่ได้ก็คือ การป้องกันการโจมตีแบบ XSSจริง ๆ แล้วเราสามารถป้องกัน XSS ได้ง่าย ๆ โดยการทำการตรวจสอบข้อมูลขาเข้าทุกอันที่มาจาก headers, cookies, query strings, form fields, และ hidden fields ที่จะถูกนำไปไปแสดงบนเว็บเพจ ซึ่งหากมีตัวอักษรพิเศษเช่น <, >, ", ',(, ) ฯลฯ จะต้องทำการ escape ตัวอักษรเหล่านั้นก่อน อีกประเด็นหนึ่งที่เราเห็นได้จาก sanook.com คือการส่ง error message ผ่านมาทาง query strings ซึ่งเป็นการเปิดโอกาสให้แฮกเกอร์โจมตี วิธีที่ถูกต้องควรทำการสร้าง lookup table ที่เก็บข้อมูล error code กับ error message และหากมีข้อผิดพลาดเกิดขึ้นก็ส่ง error code แทน เช่น "50" คือ "ไม่พบอีเมล์นี้ในระบบ" ซึ่งเมื่อโปรแกรมได้รับ error code = "50" ก็จะไปดูในตารางดังกล่าวว่า error code = "50" นั้นต้องแสดง error message อย่างไร |
|||
|
|









สวัสดีครับ พอดีผมอ่านและเข้าใจว่า ท่านได้อธิบายเกี่ยวกับ
หมายเหตุ: ทำการทดลอง ณ วันที่ 4 พฤศจิกายน 2550 ซึ่งหลังจากที่พบช่องโหว่ผมก็ได้แจ้ง sanook.com ให้แก้ไขช่องโหว่นี้แล้ว ทำให้ผลลัพธ์ที่ได้จากการกดลิงก์ต่าง ๆ ด้านล่างไม่ตรงกับรูปภาพที่แสดง
หรือ แสดง Alert สคริป javascript ครับ
Post new comment