พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

SQL Injection คืออะไร มีหลักการอย่างไร

+4 votes
ถามเมื่อ Apr 17, 2012 in Hacking โดย Eggvalue (1,179 คะแนน)
   

3 Answers

+7 votes
 
Best answer

SQL Injection เป็นเทคนิค หรือ รูปแบบ การโจมตีของ hacker โดยอาศัยช่องโหว่ของโปรแกรม

ทำให้สามารถ แอบใส่ คำสั่ง SQL เข้าไปทาง Input ทั้งหลายบน UI  เพื่อที่จะสามารถดึงข้อมูล ออกมาจากฐานข้อมูลได้

หรือแม้กระทั้ง ใช้คำสั่ง INSERT, UPDATE, DELETE, DROP อะไรก็แล้วแต่ที่กระทำกับฐานข้อมูลได้

 

ดังนั้นบน เว็บ ที่มี form input ทั้งหลาย ถ้าหากไม่ตรวจสอบข้อมูล ก่อน post แล้วล่ะก็ ก็อาจจะโดนได้

 

เช่น ตัวอย่างแบบง่ายๆ เพื่อเห็นภาพ

SQL ที่เราใช้ในการ ตรวจสอบสำหรับการ Login

 

SELECT UserID

FROM User

WHERE UserName = '$userName'

 AND Password = '$password'

 

โดยปกติ $userName และ $password ก็จะถูก POST มาจากหน้าฟอร์ม จาก input tag ของ Username และ Password

ในการเข้าสู่ระบบ ถ้าข้อมูลถูกต้องก็จะสามารถเข้าสู่ระบบได้ตามปกติไป

 

แต่ถ้า โดนยัด SQL Injection เข้ามา การ Post ข้อมูลมาจากหน้าฟอร์ม จาก input tag

จะเป็นในลักษณะ แฝงเงื่อนไขของ WHERE CLAUSE มา เช่น

User name:  1' = OR '1 = 1

Password:  1' = OR '1 = 1

 

เวลาโปรแกรมทำงาน ผลลัพธ์ ของ SQL จะเป็นดังนี้

 

SELECT UserID

FROM User

WHERE UserName = '1' = OR '1 = 1'

AND Password = '1' = OR '1 = 1'

 

ทำให้เงื่อนไขเป็นจริงเสมอ ในกรณีนี้อาจได้ข้อมูลของ User ทุกคนในระบบ หรือ ถ้าเขียนโปรแกรมไม่ดี อาจจะทำให้ Login ผ่านฉลุย

 

^^

 

 

 

ตอบเมื่อ Apr 17, 2012 โดย phanithanj (1,139 คะแนน)
selected Apr 18, 2012 โดย Eggvalue
+2 votes
หลักการคร่าวๆ ก็จะเป็นการใส่ input ที่ผิดพลาดลงไปเพื่อดูความผิดพลาดของการเรียกคำสั่ง เพื่อนำข้อมูลมาแสดงผล

ซึ่งถ้าเกิดการแสดงคำสั่งที่ผิดพลาด ประมาณว่า การเรียกคำสั่ง SQL ผิดพลาด ต่างๆ

 

ต่อมาก็จะทำให้เงื่อนในการส่งคำสั่งนั้นเป็นจริง เช่น

' or 1=1 '--

โดยการใช้ยัดคำสั่งพวกนี้ก็ต้องดูว่าเขาเขียนโค๊ดออกมารับคำสั่งในรูปแบบใด หลักจากนั้นก็จะทำการอัดฉีดคำสั่งต่างๆ เพื่อเรียกดูข้อมูลที่ต้องการ หรือทำการแก้ไข ลบ หรือแม้กระทั่งการอัพโหลดไฟล์ ก็เป็นได้..

 

ประมาณนี้ครับ
ตอบเมื่อ Apr 17, 2012 โดย $??? (240 คะแนน)
เสริมให้ว่า SQLi ไม่ได้มีแต่แบบ error based ยังมีแบบ blind sqli (ไม่เห็น error ทดสอบ query ปกติกับ SQLi จากการเช็คเงื่อนไขว่าเป็นจริงจะเป็นไง เป็นเท็จจะเป็นไง) และแบบ time based blind เป็น SQLi ที่ทดสอบโดยดูจากระยะเวลาการตอบสนองของ query และยังมีแบบ advanced มากกว่านี้อีกมากมาย ทั้งเทคนิคการ bypass การ filter ที่ใช้ปัจจัยหลาย ๆ อย่างในการทำให้ SQLi สำเร็จ
เยี่ยมเลยครับ
+1 vote
มีคนยกตัวอย่างและอธิบายการทำงานไปแล้ว ผมจะเอา log จริงๆ ที่เจอมาให้ดูละกันนะครับที่เค้าโจมตีมารูปแบบประมาณไหนบ้าง

 /web2/hp/detailnews.php?id=-999.9%20UNION%20ALL%20SELECT%200x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536,0x31303235343830303536--

SQL แบบหนึ่งที่เอาข้อมูลไปแปลงก่อนเป็นเลขฐานหรือภาษาต่างนะครับ

 

ต่อกันนะครับ

GET /ewt_news.php?nid=1558'%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null%20where%20'x'='x

 

ต่อตัวอย่างสุดท้าย อิอิ

'GET /index.php?mode=forums&forumId=1%20union%20select%20*%20from%20force_error

 

เผื่อจะเห็นภาพมากขึ้นนะครับ
ตอบเมื่อ Apr 25, 2012 โดย ณํฐพงษ์ ฟองสินธุ์ (124 คะแนน)

Related questions

+6 votes
2 คำตอบ
0 votes
1 คำตอบ
888 views ถามเมื่อ Nov 2, 2014 in Hacking โดย autoai0001 (103 คะแนน)
0 votes
2 คำตอบ
3,395 views ถามเมื่อ Oct 19, 2013 in Arduino โดย admin (240 คะแนน)
0 votes
1 คำตอบ
2,151 views ถามเมื่อ Oct 7, 2013 in Beaglebone โดย admin (240 คะแนน)
...