sql injection ทำยังไงครับ

เริ่มโดย *~เก้าคุง~*, 08 พฤศจิกายน 2010, 23:53:34

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

*~เก้าคุง~*

คือเค้าทำกันยังไงครับ ผมไปดูมีแต่วิธีป้องกัน แต่ไม่รู้ว่ามันใช้ยังไง แล้วมันทำอันตรายยังไงได้บ้าง

sakang

คือการแทรกลงในคำสั่ง sql ครับ ให้คำสั่งมันผอกเพี้ยนไป อาจจะใช้แก้ไขข้อมูล หรือเปลียนจากคำสั่งตรวจสอบให้เป็น ไม่ตรวจสอบไปซะงั้น

ประมาณนี้แหละครับ
:wanwan003:

postmunnet

มักจะใช้ใส่ในจุดที่มีการ คิวรี่ sql ครับโดยจะใส่คำสั่ง sql แปลกๆลงไปเพื่อให้มีผลในการ return error ต่างๆออกมาทำให้รู้ค่าต่างๆของ db

GigBoT

เข้าผ่าน url หรือ ทางฟอร์มกรอกข้อมูลครับ

เช่น

'or'1'='1

บลาๆๆ
[direct=https://pscclinic.com/breast-surgery/]ทำนม[/direct] - คลินิกเสริมหน้าอก PSC อันดับ 1 ของไทย
[direct=https://www.moveonmarketing.com/seo]รับทำ SEO สายขาว[/direct] |
[direct=https://www.cz.co.th/seo]รับทำ SEO[/direct]
[direct=https://www.nitithamclinic.com/laser-tattoo-removal-nitithamclinic/]ลบรอยสัก[/direct] - เลเซอร์ลบรอยสัก Pico Laser เห็นผลจริง มีรีวิวการันตี
[direct=https://www.ssdhosting.in.th/]WordPress Hosting[/direct] - โฮสติ้งคุณภาพ ที่ออกแบบมาเพื่อเว็บไซต์แบบ WordPress โดนเฉพาะ

Putter™

จากที่เคยได้อ่านๆมานะครับ

มันเป็นการแทรกคำสั่ง SQL ไปใน URL ครับ

select * from table ไรประมาณนี้อะครับ แล้วบางทีข้อมูลความลับก็อาจจะออกมาแสดงให้เห็นได้ครับ

[direct=https://hostings.ruk-com.in.th]Ruk-Com Hosting (IAAS)[/direct]
[direct=https://ruk-com.cloud]Ruk-Com Cloud (PAAS)[/direct]
รีวิวโฮสติ่ง Ruk-Com  จากสมาชิก THAISEO

ไม่พอใจยินดีคืนเงินเต็มจำนวนทุกบริการ

Hikkie

#5
concept ง่าย ๆ คืออัดฉีด sql ลงไปเพื่อให้เปลี่ยนค่าเป็น true ครับ

สมมติระบบ login ของ tsb เขียนไม่ดี ทำให้สามารถเขียน sql injection ลงไปได้

username: อะไรก็ได้ที่จะล็อคอิน
password: ' or '1' = '1 หรือ " or "1"= "1  (แนว ๆ นี้)

พอระบบมัน query ก็จะ return ค่าเป็น true และส่งผลให้ login เข้าไปได้ครับ

จริง ๆ มันเอาไป inject ตรงไหนก็ได้ที่ query ได้

ของพวกนี้แค่ concept ครับ รู้ไว้ใช่ว่า

skylove

อ้างถึงจาก: Hikkie ใน 09 พฤศจิกายน 2010, 00:29:21
concept ง่าย ๆ คืออัดฉีด sql ลงไปเพื่อให้เปลี่ยนค่าเป็น true ครับ

สมมติระบบ login ของ tsb เขียนไม่ดี ทำให้สามารถเขียน sql injection ลงไปได้

username: อะไรก็ได้ที่จะล็อคอิน
password: ' or '1' = '1 หรือ " or "1"= "1  (แนว ๆ นี้)

พอระบบมัน query ก็จะ return ค่าเป็น true และส่งผลให้ login เข้าไปได้ครับ

จริง ๆ มันเอาไป inject ตรงไหนก็ได้ที่ query ได้

ของพวกนี้แค่ concept ครับ รู้ไว้ใช่ว่า


คิดถึงอดีต  :-[

bird35793

เหอ ๆๆๆๆ อย่างงี้ก็สามารถขโมยข้อมูลสำคัญ ๆๆๆ ไปได้อะดิคับ  :P
[direct=http://www.thehddrecovery.com]HDD recovery[/direct]

postmunnet

อ้างถึงจาก: bird35793 ใน 09 พฤศจิกายน 2010, 09:16:24
เหอ ๆๆๆๆ อย่างงี้ก็สามารถขโมยข้อมูลสำคัญ ๆๆๆ ไปได้อะดิคับ  :P

เดี๋ยวนี้ส่วนใหญ่มักจะป้องกันการใส่ คิวรี่ พวกนี้แล้วครับยกเว้นคนที่เพิ่งหัดทำพวก sql บางคนอาจจะลืมป้องกัน

powerbeer001

#9
เป็นการ Hack ผ่านคำสั่ง SQL ครับ

เอาง่ายๆ เลยนะครับ ขั้นตอน BASIC
1. ระบุเว็บเป้าหมาย
2. หาช่องโหว่  อาจจะใช้ tools ก็ได้ มีเยอะ รันคำสั่งเดียวตรวจสอบให้หมด  
3. จัดการซะ (ถ้าเจอ)

ส่วนใหญ่ที่ผมลอง Hack ผ่าน SQL Injection จะใช้ได้กับเว็บที่ใช้ asp เขียน เกือบ 100% ส่วน PHP แทบใช้่บ่ได้
อ้างถึง
[direct=https://www.examvify.com] ระบบฐานข้อมูลข้อสอบและห้องสอบออนไลน์ฟรี [/direct]

อ้างถึง
[direct=https://www.posvis.com] โปรแกรมบริหารร้านค้า POS ฟรี [/direct]

TOOAds.com

ถ้าเราจะเช็ค sql injection เราใช้คำสั่ง  ประมาณข้างล่างใช่ป่าวครับ หรือคำสั่งอื่นๆอีก :wanwan017:

username: อะไรก็ได้ที่จะล็อคอิน
password: ' or '1' = '1 หรือ " or "1"= "1

m2studio

สมมติว่าเวลากดปุ่ม Login แล้วระบบเราใช้คำสั่งแบบนี้เข้าไป Query ข้อมูลนะ
SELECT * FROM members WHERE username='login_name' AND password='password'

แต่ตรง password ไอ่แจ้า hacker ดันใส่ เป็นแบบนี้มา A'; SHOW TABLES มันก็จะกลายเป็น
SELECT * FROM members WHERE username='login_name' AND password='A'; SHOW TABLES
โดยคำสั่งนี้ hacker ได้ใช้ ; เป็นตัวปิดคำสั่งแรก และใช้ SHOW TABLES เปิดคำสั่งใหม่ เห็นมั้ยครับ hack ง่ายมากๆ

SHOW TABLES คือคำสั่งที่ให้แสดงว่าใน DB เรามีชื่อ Table อะไรบ้างครางหน้าจะได้ใช้คำสั่ง SELECT * FROM "table_name" นั้นๆ เอาข้อมูลออกมา ตามที่ hacker อยากจะรู้

ปล. ระบบไหนไม่กัน SQL INJECTION นั่นเท่ากับว่า สามารถโดนขโมยข้อมูลได้ทั้ง DB เลยทีเดียว ^^
ร้านค้าออนไลน์แห่งใหม่เปิดให้บริการแล้ว

[direct=http://www.shoppingsija.com]ร้านค้าออนไลน์[/direct]
[direct=http://www.balahave.com]Ecommerce[/direct]
[direct=http://www.shoppingsija.com/กระเป๋าสะพาย]กระเป๋าสะพาย[/direct]
[direct=http://www.shoppingsija.com/กระเป๋าแฟชั่น]กระเป๋าแฟชั่น[/direct]

WPDSign

หัดทำเว็บเพลินลืมจุดนี้ทุกทีเลย น่ากลัวจริงๆ
สร้างบ้าน Modern [direct=https://casa-concept1.com/]แบบบ้านโมเดิร์น[/direct] มาแรง
» ต้องการสร้างบ้านดูแบบบ้านสวยๆ [direct=http://www.architect-bkk.com/แบบบ้านสองชั้น]แบบบ้านสองชั้น[/direct] ทุกสไลต์บริการ[direct=http://www.ideaican.com/]รับสร้างบ้าน[/direct] ใครฝันอย่างสร้างบ้านสไตล์รีสอร์ท มี[direct=https://แบบบ้านสไตล์รีสอร์ท.blogspot.com]แบบบ้านสไตล์รีสอร์ท[/direct]พร้อมก่อสร้าง ลงประกาศขายบ้านที่ [direct=http://www.classified108.com/]ลงประกาศ[/direct]

ohmohm

สมมติ

foo.php<?php

$q 
'select * from linkstbl where lname = ' $_GET['n'];



เราก็อาจโดนดี โดยถูกเรียก

foo.php?n=1;delete from linkstbl


ทำให้ $q เป็น 'select * from linkstbl where lname = 1;delete from linkstbl'

Mayjung007

ศึกษาอยุ่เหมือนกัน ถ้าอยากรู้ลึกกว่านี้ COmputer & Network Security แนะนำเลย เพราะพึ่งงยืมมาจากห้องสมุด หาอ่านใน se-ed ก้ได้


icon

โห้ เอา แต่ แบบ ทำให้พังมาบอกกัน งัดเอาวิธีป้องกันมาแนะนำกันมั่งเด้อ :wanwan019:
ที่สุดของการ[direct=http://www.itn.co.th]วางระบบ LAN & WiFi[/direct]

m2studio

อ้างถึงจาก: icon ใน 09 พฤศจิกายน 2010, 23:25:36
โห้ เอา แต่ แบบ ทำให้พังมาบอกกัน งัดเอาวิธีป้องกันมาแนะนำกันมั่งเด้อ :wanwan019:

วิธีป้องกันง่ายมากครับ เราแค่ Escape ตัวอักษรที่เป็นสัญลักษณ์ของ SQL command ออกก็เท่านั้นเองเช่น
ตัวอย่างเดิม ผมกรอก A'; SHOW TABLES

พอ Escape เสร็จก็จะกลายเป็น A\'; SHOW TABLES << สังเกต คือเปลี่ยนจาก ' เป็น \' เพื่อให้ SQL มองว่าเป็นเป็นข้อความไม่ใช่คำสั่ง
ดังนั้นจะเป็น
SELECT * FROM members WHERE username='username' AND password='A\'; SHOW TABLES'

แค่นี้เองครับ แก้ง่ายมาก แต่ต้องทำทุกจดนะครับ แต่ถ้าออกแบบการเขียนโปรแกรมมาดีถือว่าแก้ง่ายมากๆ

ปล. อย่าลืมตรวจสอบเว็บของคุณนะครับว่าแก้ SQL INJECTION แล้วหรือยัง
ร้านค้าออนไลน์แห่งใหม่เปิดให้บริการแล้ว

[direct=http://www.shoppingsija.com]ร้านค้าออนไลน์[/direct]
[direct=http://www.balahave.com]Ecommerce[/direct]
[direct=http://www.shoppingsija.com/กระเป๋าสะพาย]กระเป๋าสะพาย[/direct]
[direct=http://www.shoppingsija.com/กระเป๋าแฟชั่น]กระเป๋าแฟชั่น[/direct]

icon

อ้างถึงจาก: m2studio ใน 09 พฤศจิกายน 2010, 23:41:14
อ้างถึงจาก: icon ใน 09 พฤศจิกายน 2010, 23:25:36
โห้ เอา แต่ แบบ ทำให้พังมาบอกกัน งัดเอาวิธีป้องกันมาแนะนำกันมั่งเด้อ :wanwan019:

วิธีป้องกันง่ายมากครับ เราแค่ Escape ตัวอักษรที่เป็นสัญลักษณ์ของ SQL command ออกก็เท่านั้นเองเช่น
ตัวอย่างเดิม ผมกรอก A'; SHOW TABLES

พอ Escape เสร็จก็จะกลายเป็น A\'; SHOW TABLES << สังเกต คือเปลี่ยนจาก ' เป็น \' เพื่อให้ SQL มองว่าเป็นเป็นข้อความไม่ใช่คำสั่ง
ดังนั้นจะเป็น
SELECT * FROM members WHERE username='username' AND password='A\'; SHOW TABLES'

แค่นี้เองครับ แก้ง่ายมาก แต่ต้องทำทุกจดนะครับ แต่ถ้าออกแบบการเขียนโปรแกรมมาดีถือว่าแก้ง่ายมากๆ

ปล. อย่าลืมตรวจสอบเว็บของคุณนะครับว่าแก้ SQL INJECTION แล้วหรือยัง

ขอบคุณครับ ใครยังไม่ได้ป้องกันก็รีบๆแก้ป้องกัน กันซะนะครับ เดี่ยวเว็บที่เราหวงแหนจะแย่เอา ผมก็โดนมาแล้ว ตอนนี้กำลังปรับปรุงอย่างหนัก เว็บเก่า ก่อนหน้า ที่ทำความรู้ไม่ถึง เลยจำต้องแก้
ที่สุดของการ[direct=http://www.itn.co.th]วางระบบ LAN & WiFi[/direct]

thai2ads

เอาคำสั่งนี้ไป Run ที่ Host นะครับ
echo get_magic_quotes_gpc();
หากค่าที่ได้เป็น 1 หมายความว่า ค่าที่ส่งจากตัวแปรจะเลือกอักขระพิเศษโดยอัตโนมัติ
วิธีป้องกัน ด้วยคำสั่ง mysql_real_escape_string();
รับทำเว็บไซต์ เขียนระบบต่างๆตามที่ต้องการ
รับทำเว็บไซต์ | ทองคำราคาวันนี้

jackies

แอบเนียนบทความเก่าหน่อย ^^ http://www.nextproject.net/contents/default.aspx?00042

แต่บางครั้งเอาไม่อยุ่ครับโดยเฉพาะข้อมูลที่เป็น String มันมีอีกเทคนิคนึงที่ส่งตรงผ่าน URL ที่เข้ามาได้ แบบไม่มี ' เคยโดนจังๆมาครั้งนึง แบบเทรกสคริป มาไกลจากรัสเซีย หาอยู่หลายวัน ดู Log ถึงรู้ ไม่ขอเปิดเผยเพราะเป็นดาบ 2 คม
เอาเป็นว่า ถ้าเป็นไปได้ให้ Fix command บางตัวของข้อมูลที่รับเข้ามา ก่อนส่งต่อรวม Query String ใช้ Function replace ก็ได้เอา พวก "'", "--", ";--", "/*", "*/", "nchar", "varchar", "nvarchar", "ntext" ออก หรือค่ารับมาเป็นตัวเลข ก็ครอบ function พวก cint() ก่อน

ตย. asp.net ประมาณนี้

Public Shared Function fix_sql(ByVal data As String) As String

            Dim blackList As String() = {"'", "--", ";--", "/*", "*/", "nchar", "varchar", "nvarchar", "ntext"}
            Dim whiteList As String() = {"''", "~", "~~", "/", "/", "nchar[]", "varchar[]", "nvarchar[]", "ntext[]"}

            For i As Integer = 0 To blackList.Length - 1
                If (data.IndexOf(blackList(i), StringComparison.OrdinalIgnoreCase) >= 0) Then
                    data = Regex.Replace(data, blackList(i), whiteList(i), RegexOptions.IgnoreCase)
                End If
            Next

            Return (Trim(data))
 
End Function

หรือถ้ากรองเต็มก็ใช้

'Dim blackList As String() = {"'", "--", ";--", "/*", "*/", "@@", "nchar", "varchar", "nvarchar", "ntext", "alter", "cast", "create", "cursor", "declare", "delete", "drop", "exec", "execute", "fetch", "insert", "kill", "select", "sys", "sysobjects", "syscolumns", "table"}
            'Dim whiteList As String() = {"''", "~~", ":~~", "|", "|", "[@@]", "nchar[]", "varchar[]", "nvarchar[]", "ntext[]", "[alter]", "cast[]", "[create]", "[cursor]", "[declare]", "[delete]", "[drop]", "[exec]", "[execute]", "[fetch]", "[insert]", "[kill]", "[select]", "[sys]", "[sysobjects]", "[syscolumns]", "
"}

แต่แบบนี้บางอย่างมัน replace มั่วไปหมด