ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: *~เก้าคุง~* ที่ 08 พฤศจิกายน 2010, 23:53:34



หัวข้อ: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: *~เก้าคุง~* ที่ 08 พฤศจิกายน 2010, 23:53:34
คือเค้าทำกันยังไงครับ ผมไปดูมีแต่วิธีป้องกัน แต่ไม่รู้ว่ามันใช้ยังไง แล้วมันทำอันตรายยังไงได้บ้าง


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: sakang ที่ 09 พฤศจิกายน 2010, 00:02:45
คือการแทรกลงในคำสั่ง sql ครับ ให้คำสั่งมันผอกเพี้ยนไป อาจจะใช้แก้ไขข้อมูล หรือเปลียนจากคำสั่งตรวจสอบให้เป็น ไม่ตรวจสอบไปซะงั้น

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


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: postmunnet ที่ 09 พฤศจิกายน 2010, 00:13:11
มักจะใช้ใส่ในจุดที่มีการ คิวรี่ sql ครับโดยจะใส่คำสั่ง sql แปลกๆลงไปเพื่อให้มีผลในการ return error ต่างๆออกมาทำให้รู้ค่าต่างๆของ db


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: GigBoT ที่ 09 พฤศจิกายน 2010, 00:18:08
เข้าผ่าน url หรือ ทางฟอร์มกรอกข้อมูลครับ

เช่น

โค๊ด:
'or'1'='1

บลาๆๆ


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: Putter™ ที่ 09 พฤศจิกายน 2010, 00:21:37
จากที่เคยได้อ่านๆมานะครับ

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

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



หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: 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 ครับ รู้ไว้ใช่ว่า


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: skylove ที่ 09 พฤศจิกายน 2010, 01:48:09
concept ง่าย ๆ คืออัดฉีด sql ลงไปเพื่อให้เปลี่ยนค่าเป็น true ครับ

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

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

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

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

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


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


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


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: postmunnet ที่ 09 พฤศจิกายน 2010, 09:18:15
เหอ ๆๆๆๆ อย่างงี้ก็สามารถขโมยข้อมูลสำคัญ ๆๆๆ ไปได้อะดิคับ  :P

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


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: powerbeer001 ที่ 09 พฤศจิกายน 2010, 09:58:13
เป็นการ Hack ผ่านคำสั่ง SQL ครับ

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

ส่วนใหญ่ที่ผมลอง Hack ผ่าน SQL Injection จะใช้ได้กับเว็บที่ใช้ asp เขียน เกือบ 100% ส่วน PHP แทบใช้่บ่ได้


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: TOOAds.com ที่ 09 พฤศจิกายน 2010, 10:13:13
ถ้าเราจะเช็ค sql injection เราใช้คำสั่ง  ประมาณข้างล่างใช่ป่าวครับ หรือคำสั่งอื่นๆอีก :wanwan017:

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


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: m2studio ที่ 09 พฤศจิกายน 2010, 10:27:33
สมมติว่าเวลากดปุ่ม 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 เลยทีเดียว ^^


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: WPDSign ที่ 09 พฤศจิกายน 2010, 10:31:36
หัดทำเว็บเพลินลืมจุดนี้ทุกทีเลย น่ากลัวจริงๆ
 


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: ohmohm ที่ 09 พฤศจิกายน 2010, 23:04:05
สมมติ

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'


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: Mayjung007 ที่ 09 พฤศจิกายน 2010, 23:16:49
ศึกษาอยุ่เหมือนกัน ถ้าอยากรู้ลึกกว่านี้ COmputer & Network Security แนะนำเลย เพราะพึ่งงยืมมาจากห้องสมุด หาอ่านใน se-ed ก้ได้



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


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: m2studio ที่ 09 พฤศจิกายน 2010, 23:41:14
โห้ เอา แต่ แบบ ทำให้พังมาบอกกัน งัดเอาวิธีป้องกันมาแนะนำกันมั่งเด้อ :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 แล้วหรือยัง


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: icon ที่ 10 พฤศจิกายน 2010, 00:00:19
โห้ เอา แต่ แบบ ทำให้พังมาบอกกัน งัดเอาวิธีป้องกันมาแนะนำกันมั่งเด้อ :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 แล้วหรือยัง

ขอบคุณครับ ใครยังไม่ได้ป้องกันก็รีบๆแก้ป้องกัน กันซะนะครับ เดี่ยวเว็บที่เราหวงแหนจะแย่เอา ผมก็โดนมาแล้ว ตอนนี้กำลังปรับปรุงอย่างหนัก เว็บเก่า ก่อนหน้า ที่ทำความรู้ไม่ถึง เลยจำต้องแก้


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: thai2ads ที่ 10 พฤศจิกายน 2010, 00:21:22
เอาคำสั่งนี้ไป Run ที่ Host นะครับ
echo get_magic_quotes_gpc();
หากค่าที่ได้เป็น 1 หมายความว่า ค่าที่ส่งจากตัวแปรจะเลือกอักขระพิเศษโดยอัตโนมัติ
วิธีป้องกัน ด้วยคำสั่ง mysql_real_escape_string();


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: jackies ที่ 10 พฤศจิกายน 2010, 20:56:58
แอบเนียนบทความเก่าหน่อย ^^ 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 มั่วไปหมด


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: TOOAds.com ที่ 13 พฤศจิกายน 2010, 11:18:15
เอาคำสั่งนี้ไป Run ที่ Host นะครับ
echo get_magic_quotes_gpc();
หากค่าที่ได้เป็น 1 หมายความว่า ค่าที่ส่งจากตัวแปรจะเลือกอักขระพิเศษโดยอัตโนมัติ
วิธีป้องกัน ด้วยคำสั่ง mysql_real_escape_string();
ผมได้ 1 ทำยังไงดีครับ mysql_real_escape_string(); ต้องไปใส่แทนโคดไหนหรอครับ :wanwan017:


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: jackies ที่ 13 พฤศจิกายน 2010, 17:28:31
เพิ่มเติมอีกนิด สำหรับท่านที่เขียนเวบแบบ เขียนโค๊ดเอง อยากรู้เรื่อง security

แนะนำลองเล่นภารกิจ http://try2hack.siamdev.net ดูครับ

ถ้าเล่นจบผมว่าน่าจะได้ความรู้ระดับนึงเลยที่เดียว เป็นการเรียนรู้เชิงป้องกันครับ :wanwan003:




หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: pomchai ที่ 14 พฤศจิกายน 2010, 08:26:35
แรกๆ ผมก็ไม่เข้าใจ แต่พอ search หาเรื่อย ก็พอเข้าใจบ้างครับ


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: penthai06 ที่ 14 พฤศจิกายน 2010, 13:48:19
ง่ายๆ เลยตัดตัวอักขระพิเศษออกให้หมดก่อนเลยครับแล้วค่อยเอาไปประมวลผลใน MySql หรือจัดตัดปัญหาโดยใช้ framework ไปเลยก็ได้ถ้าไม่มั่นใจใน code ที่เราเขียนก็เอาพวก ADODB มาใช้ก็ได้


หัวข้อ: Re: sql injection ทำยังไงครับ
เริ่มหัวข้อโดย: aum_mix ที่ 14 พฤศจิกายน 2010, 14:18:59
ตอนเขียนผมลืมเรื่องนี้ไปเลยนะนิ ต้องไปเช็คซะแล้ว  :wanwan004: