เครื่องสแกน SQL Injection Advanced - IIS & DBO
กลไกขั้นสูงของการฉีด SQL ที่ผู้ใช้ที่เป็นอันตรายสามารถใช้งานได้เพื่อรับข้อมูลที่สำคัญและใช้ประโยชน์จากมันเพื่อควบคุมระบบคอมพิวเตอร์อย่างสมบูรณ์
หมายเหตุอธิบาย
บทความนี้ไม่ได้พยายามอธิบายเทคนิคใหม่ของการประนีประนอมระบบคอมพิวเตอร์เทคนิคการฉีด SQL นั้นเก่ามากและเป็นที่รู้จัก แต่ในขณะเดียวกันก็มีประสิทธิภาพมาก บทความนี้ยังไม่ได้สะท้อนถึงการหาประโยชน์ของช่องโหว่ที่ไม่รู้จักซึ่งเป็นที่รู้จักและได้รับการรายงานแล้วซึ่งหากสามารถสะท้อนได้นั้นเป็นกลไกขั้นสูงที่ไม่ได้เผยแพร่ของการฉีด SQL ที่ผู้ใช้ที่เป็นอันตรายสามารถใช้งานได้เพื่อรับข้อมูลที่สำคัญและใช้ประโยชน์จากมันเพื่อควบคุมระบบคอมพิวเตอร์อย่างสมบูรณ์
การรวมเทคนิคนี้เข้ากับเว็บเซิร์ฟเวอร์ IIS กับสิทธิ์ผู้ใช้ที่ยกระดับ (DBO) ในฐานข้อมูล Microsoft SQL Server สามารถนำไปสู่การสูญเสียการควบคุมเซิร์ฟเวอร์ที่ได้รับผลกระทบอย่างสมบูรณ์
บทความนี้จะพยายามอธิบายถึงความเสี่ยงที่อาจเกิดขึ้นจากการกำหนดค่าความผิดพลาดของฐานข้อมูล SQL ที่โต้ตอบกับหน้าเว็บภายนอกผ่านเว็บเซิร์ฟเวอร์ IIS และให้รายละเอียดว่าผู้ใช้ที่เป็นอันตรายสามารถได้รับประโยชน์อย่างไร
สรุปสั้น ๆ (Wikipedia)
SQL Injection เป็นเทคนิคการฉีดรหัสที่ใช้ในการโจมตีแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูลซึ่งคำสั่ง SQL ที่ไร้เดียงสาจะถูกแทรกลงในฟิลด์รายการสำหรับการดำเนินการ (เช่นเพื่อทิ้งเนื้อหาฐานข้อมูลไปยังผู้โจมตี) การฉีด SQL จะต้องใช้ประโยชน์จากช่องโหว่ด้านความปลอดภัยในซอฟต์แวร์ของแอปพลิเคชันตัวอย่างเช่นเมื่อการป้อนข้อมูลของผู้ใช้ถูกกรองไม่ถูกต้องสำหรับอักขระหลบหนีที่แท้จริงของสตริงที่ฝังอยู่ในคำสั่ง SQL หรืออินพุตผู้ใช้ไม่ได้พิมพ์อย่างรุนแรงและดำเนินการอย่างไม่คาดคิด การฉีด SQL ส่วนใหญ่เป็นที่รู้จักกันในชื่อเวกเตอร์การโจมตีสำหรับเว็บไซต์ แต่สามารถใช้โจมตีฐานข้อมูล SQL ทุกประเภท
การโจมตีแบบฉีด SQL ช่วยให้ผู้โจมตีสามารถหลอกตัวตนได้การงัดแงะด้วยข้อมูลที่มีอยู่ทำให้เกิดปัญหาการปฏิเสธเช่นการทำธุรกรรมโมฆะหรือเปลี่ยนยอดคงเหลือช่วยให้การเปิดเผยข้อมูลทั้งหมดในระบบทั้งหมดทำลายข้อมูลหรือทำให้ไม่พร้อมใช้งานและเป็นผู้ดูแลระบบเซิร์ฟเวอร์ฐานข้อมูล
ความอ่อนแอ
สมมติว่าในหน้าเว็บมีปัญหาด้านความปลอดภัยกับการผ่านพารามิเตอร์เพื่ออนุญาตให้ฉีด SQL ปัญหาหลักคือเว็บเซิร์ฟเวอร์ IIS สามารถแสดงข้อมูลที่สำคัญต่อผู้ใช้โดยใช้ฟังก์ชั่นการแปลง Transact-SQL ที่ไม่ถูกต้อง ลองนึกภาพ URL ต่อไปนี้ที่พารามิเตอร์ ID อนุญาตให้ฉีด
https://www.victim.com/index.aspx?id=1
ผู้ใช้ที่เป็นอันตรายสามารถแทนที่ค่าของพารามิเตอร์ ID โดยฟังก์ชันการแปลง Transact-SQL
แปลง (int, (เลือก+ผู้ใช้));-
URL สุดท้ายจะเป็นสไตล์นี้:
https://www.victim.com/index.aspx?id=convert(int, (เลือก+ผู้ใช้));
ฟังก์ชั่นการแปลงพยายามแปลงสตริงเป็นจำนวนเต็มซึ่งทำให้เกิดข้อยกเว้นที่เว็บเซิร์ฟเวอร์ IIS ทำให้เกิดข้อผิดพลาดร้ายแรงที่แสดงค่าของแบบสอบถามที่ดำเนินการ
ผลลัพธ์ทั่วไปจะเป็นเช่นนี้:
การแปลงล้มเหลวเมื่อแปลงค่า nvarchar '{user}' เป็นประเภทข้อมูล int
เนื่องจากเราสามารถเห็นค่า {user} สอดคล้องกับค่าปัจจุบันของผู้ใช้ของฐานข้อมูลนอกเหนือจากทั้งหมดนี้หากค่าที่ส่งคืนคือ DBO จะบอกเราว่าผู้ใช้ฐานข้อมูลมีสิทธิ์การดำเนินการสูงสุด
การใช้เว็บเพจที่มีผู้ใช้ฐานข้อมูลที่มีสิทธิ์สูงสุดเป็นข้อผิดพลาดด้านความปลอดภัยที่ร้ายแรงซึ่งผู้ดูแลระบบไม่ควรตก
โดยสรุปอาจกล่าวได้ว่าช่องโหว่ประกอบด้วยสามปัจจัย:
- ข้อผิดพลาดในการจัดการพารามิเตอร์รับ/โพสต์ที่อนุญาตให้ฉีด SQL (นักพัฒนาซอฟต์แวร์)
- IIS เว็บเซิร์ฟเวอร์ที่แสดงข้อมูลฟังก์ชั่นการแปลง (Microsoft)
- ใช้ผู้ใช้ฐานข้อมูลในหน้าเว็บที่มีสิทธิ์สูงสุด (ผู้ดูแลระบบ/นักพัฒนาซอฟต์แวร์)
เวอร์ชัน 4.0 (ส่วนตัว)
รุ่นขยาย 4.0 ของสแกนเนอร์มันอยู่ในพื้นที่เก็บข้อมูลส่วนตัว (มองเห็นได้โดยผู้สนับสนุน) พร้อมฟังก์ชั่นทั้งหมด
- https://github.com/iricartb/advanced-sql-injection-scanner-release
ข้อมูลเพิ่มเติม
https://advanced-sql-inject.blogspot.com/2017/06/ivan-ricart-borges-advanced-sql.html