際際滷

際際滷Share a Scribd company logo
T畉N CNG KI畛U SQL INJECTION -
                        TC H畉I V PHNG TRNH
   L棚 狸nh Duy
   Khoa C担ng Ngh畛 Th担ng Tin, Tr動畛ng H Khoa H畛c T畛 Nhi棚n Tp. HCM.
   Email: ldduy@fit.hcmuns.edu.vn


1. SQL Injection l g狸?
Khi tri畛n khai c叩c 畛ng d畛ng web tr棚n Internet, nhi畛u ng動畛i v畉n ngh挑 r畉ng vi畛c 畉m b畉o an ton, b畉o
m畉t nh畉m gi畉m thi畛u t畛i a kh畉 nng b畛 t畉n c担ng t畛 c叩c tin t畉c ch畛 董n thu畉n t畉p trung vo c叩c v畉n
畛 nh動 ch畛n h畛 i畛u hnh, h畛 qu畉n tr畛 c董 s畛 d畛 li畛u, webserver s畉 ch畉y 畛ng d畛ng, ... m qu棚n m畉t
r畉ng ngay c畉 b畉n th但n 畛ng d畛ng ch畉y tr棚n 坦 c滴ng ti畛m 畉n m畛t l畛 h畛ng b畉o m畉t r畉t l畛n. M畛t trong
s畛 c叩c l畛 h畛ng ny 坦 l SQL injection. T畉i Vi畛t Nam, 達 qua th畛i k狸 c叩c qu畉n tr畛 website l董 l vi畛c
qu辿t virus, c畉p nh畉t c叩c b畉n v叩 l畛i t畛 c叩c ph畉n m畛m h畛 th畛ng, nh動ng vi畛c chm s坦c c叩c l畛i c畛a c叩c
畛ng d畛ng l畉i r畉t 鱈t 動畛c quan t但m. 坦 l l鱈 do t畉i sao trong th畛i gian v畛a qua, kh担ng 鱈t website t畉i
Vi畛t Nam b畛 t畉n c担ng v a s畛 畛u l l畛i SQL injection [1]. V畉y SQL injection l g狸 ?
SQL injection l m畛t k挑 thu畉t cho ph辿p nh畛ng k畉 t畉n c担ng l畛i d畛ng l畛 h畛ng trong vi畛c ki畛m tra d畛
li畛u nh畉p trong c叩c 畛ng d畛ng web v c叩c th担ng b叩o l畛i c畛a h畛 qu畉n tr畛 c董 s畛 d畛 li畛u 畛 "ti棚m vo"
(inject) v thi hnh c叩c c但u l畛nh SQL b畉t h畛p ph叩p (kh担ng 動畛c ng動畛i ph叩t tri畛n 畛ng d畛ng l動畛ng
tr動畛c). H畉u qu畉 c畛a n坦 r畉t tai h畉i v狸 n坦 cho ph辿p nh畛ng k畉 t畉n c担ng c坦 th畛 th畛c hi畛n c叩c thao t叩c
x坦a, hi畛u ch畛nh,  do c坦 ton quy畛n tr棚n c董 s畛 d畛 li畛u c畛a 畛ng d畛ng, th畉m ch鱈 l server m 畛ng
d畛ng 坦 ang ch畉y. L畛i ny th動畛ng x畉y ra tr棚n c叩c 畛ng d畛ng web c坦 d畛 li畛u 動畛c qu畉n l鱈 b畉ng c叩c
h畛 qu畉n tr畛 c董 s畛 d畛 li畛u nh動 SQL Server, MySQL, Oracle, DB2, Sysbase.
2. C叩c d畉ng t畉n c担ng b畉ng SQL Injection
C坦 b畛n d畉ng th担ng th動畛ng bao g畛m: v動畛t qua ki畛m tra l炭c ng nh畉p (authorization bypass), s畛
d畛ng c但u l畛n SELECT, s畛 d畛ng c但u l畛nh INSERT, s畛 d畛ng c叩c stored-procedures [2], [3].
2.1. D畉ng t畉n c担ng v動畛t qua ki畛m tra ng nh畉p
V畛i d畉ng t畉n c担ng ny, tin t畉c c坦 th畛 d畛 dng v動畛t qua c叩c trang ng nh畉p nh畛 vo l畛i khi d湛ng
c叩c c但u l畛nh SQL thao t叩c tr棚n c董 s畛 d畛 li畛u c畛a 畛ng d畛ng web.
X辿t m畛t v鱈 d畛 i畛n h狸nh, th担ng th動畛ng 畛 cho ph辿p ng動畛i d湛ng truy c畉p vo c叩c trang web 動畛c
b畉o m畉t, h畛 th畛ng th動畛ng x但y d畛ng trang ng nh畉p 畛 y棚u c畉u ng動畛i d湛ng nh畉p th担ng tin v畛 t棚n
ng nh畉p v m畉t kh畉u. Sau khi ng動畛i d湛ng nh畉p th担ng tin vo, h畛 th畛ng s畉 ki畛m tra t棚n ng nh畉p
v m畉t kh畉u c坦 h畛p l畛 hay kh担ng 畛 quy畉t 畛nh cho ph辿p hay t畛 ch畛i th畛c hi畛n ti畉p.
Trong tr動畛ng h畛p ny, ng動畛i ta c坦 th畛 d湛ng hai trang, m畛t trang HTML 畛 hi畛n th畛 form nh畉p li畛u
v m畛t trang ASP d湛ng 畛 x畛 l鱈 th担ng tin nh畉p t畛 ph鱈a ng動畛i d湛ng. V鱈 d畛:
       login.htm
       <form action="ExecLogin.asp" method="post">
        Username: <input type="text" name="fUSRNAME"><br>
        Password: <input type="password" name="fPASSWORD"><br>
        <input type="submit">
       </form>




                                                 1
execlogin.asp
       <%
        Dim vUsrName, vPassword, objRS, strSQL
        vUsrName = Request.Form("fUSRNAME")
        vPassword = Request.Form("fPASSWORD")

        strSQL = "SELECT * FROM T_USERS " & _
             "WHERE USR_NAME=' " & vUsrName & _
             " ' and USR_PASSWORD=' " & vPassword & " ' "

        Set objRS = Server.CreateObject("ADODB.Recordset")
        objRS.Open strSQL, "DSN=..."

        If (objRS.EOF) Then
          Response.Write "Invalid login."
        Else
          Response.Write "You are logged in as " & objRS("USR_NAME")
        End If

        Set objRS = Nothing
       %>

Tho畉t nh狸n, o畉n m達 trong trang execlogin.asp d動畛ng nh動 kh担ng ch畛a b畉t c畛 m畛t l畛 h畛ng v畛 an ton
no. Ng動畛i d湛ng kh担ng th畛 ng nh畉p m kh担ng c坦 t棚n ng nh畉p v m畉t kh畉u h畛p l畛. Tuy nhi棚n,
o畉n m達 ny th畛c s畛 kh担ng an ton v l ti畛n 畛 cho m畛t l畛i SQL injection. 畉c bi畛t, ch畛 s董 h畛
n畉m 畛 ch畛 d畛 li畛u nh畉p vo t畛 ng動畛i d湛ng 動畛c d湛ng 畛 x但y d畛ng tr畛c ti畉p c但u l畛nh SQL. Ch鱈nh
i畛u ny cho ph辿p nh畛ng k畉 t畉n c担ng c坦 th畛 i畛u khi畛n c但u truy v畉n s畉 動畛c th畛c hi畛n. V鱈 d畛, n畉u
ng動畛i d湛ng nh畉p chu畛i sau vo trong c畉 2 担 nh畉p li畛u username/password c畛a trang login.htm l:
' OR ' ' = ' '. L炭c ny, c但u truy v畉n s畉 動畛c g畛i th畛c hi畛n l:
SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''=''

C但u truy v畉n ny l h畛p l畛 v s畉 tr畉 v畛 t畉t c畉 c叩c b畉n ghi c畛a T_USERS v o畉n m達 ti畉p theo x畛 l鱈
ng動畛i d湛ng ng nh畉p b畉t h畛p ph叩p ny nh動 l ng動畛i d湛ng ng nh畉p h畛p l畛.
2.2. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh SELECT
D畉ng t畉n c担ng ny ph畛c t畉p h董n. 畛 th畛c hi畛n 動畛c ki畛u t畉n c担ng ny, k畉 t畉n c担ng ph畉i c坦 kh畉
nng hi畛u v l畛i d畛ng c叩c s董 h畛 trong c叩c th担ng b叩o l畛i t畛 h畛 th畛ng 畛 d嘆 t狸m c叩c i畛m y畉u kh畛i
畉u cho vi畛c t畉n c担ng.
X辿t m畛t v鱈 d畛 r畉t th動畛ng g畉p trong c叩c website v畛 tin t畛c. Th担ng th動畛ng, s畉 c坦 m畛t trang nh畉n ID
c畛a tin c畉n hi畛n th畛 r畛i sau 坦 truy v畉n n畛i dung c畛a tin c坦 ID ny. V鱈 d畛:
http://www.myhost.com/shownews.asp?ID=123. M達 ngu畛n cho ch畛c nng ny th動畛ng 動畛c vi畉t kh叩
董n gi畉n theo d畉ng


     <%
      Dim vNewsID, objRS, strSQL
      vNewsID = Request("ID")

       strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID



                                                2
Set objRS = Server.CreateObject("ADODB.Recordset")
       objRS.Open strSQL, "DSN=..."

       Set objRS = Nothing
      %>

Trong c叩c t狸nh hu畛ng th担ng th動畛ng, o畉n m達 ny hi畛n th畛 n畛i dung c畛a tin c坦 ID tr湛ng v畛i ID 達
ch畛 畛nh v h畉u nh動 kh担ng th畉y c坦 l畛i. Tuy nhi棚n, gi畛ng nh動 v鱈 d畛 ng nh畉p 畛 tr動畛c, o畉n m達 ny
畛 l畛 s董 h畛 cho m畛t l畛i SQL injection kh叩c. K畉 t畉n c担ng c坦 th畛 thay th畉 m畛t ID h畛p l畛 b畉ng c叩ch
g叩n ID cho m畛t gi叩 tr畛 kh叩c, v t畛 坦, kh畛i 畉u cho m畛t cu畛c t畉n c担ng b畉t h畛p ph叩p, v鱈 d畛 nh動: 0
OR 1=1 (ngh挑a l, http://www.myhost.com/shownews.asp?ID=0 or 1=1).
C但u truy v畉n SQL l炭c ny s畉 tr畉 v畛 t畉t c畉 c叩c article t畛 b畉ng d畛 li畛u v狸 n坦 s畉 th畛c hi畛n c但u l畛nh:
   SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1

M畛t tr動畛ng h畛p kh叩c, v鱈 d畛 nh動 trang t狸m ki畉m. Trang ny cho ph辿p ng動畛i d湛ng nh畉p vo c叩c
th担ng tin t狸m ki畉m nh動 H畛, T棚n,  o畉n m達 th動畛ng g畉p l:
    <%
     Dim vAuthorName, objRS, strSQL
     vAuthorName = Request("fAUTHOR_NAME")

      strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _
      vAuthorName & " ' "

      Set objRS = Server.CreateObject("ADODB.Recordset")
      objRS.Open strSQL, "DSN=..."

     
     Set objRS = Nothing
    %>

T動董ng t畛 nh動 tr棚n, tin t畉c c坦 th畛 l畛i d畛ng s董 h畛 trong c但u truy v畉n SQL 畛 nh畉p vo tr動畛ng t棚n t叩c
gi畉 b畉ng chu畛i gi叩 tr畛:
' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '='         (*)

L炭c ny, ngoi c但u truy v畉n 畉u kh担ng thnh c担ng, ch動董ng tr狸nh s畉 th畛c hi畛n th棚m l畛nh ti畉p theo
sau t畛 kh坦a UNION n畛a.
T畉t nhi棚n c叩c v鱈 d畛 n坦i tr棚n, d動畛ng nh動 kh担ng c坦 g狸 nguy hi畛m, nh動ng h達y th畛 t動畛ng t動畛ng k畉 t畉n
c担ng c坦 th畛 x坦a ton b畛 c董 s畛 d畛 li畛u b畉ng c叩ch ch竪n vo c叩c o畉n l畛nh nguy hi畛m nh動 l畛nh DROP
TABLE. V鱈 d畛 nh動: ' DROP TABLE T_AUTHORS --
Ch畉c c叩c b畉n s畉 th畉c m畉c l lm sao bi畉t 動畛c 畛ng d畛ng web b畛 l畛i d畉ng ny 動畛c. R畉t 董n gi畉n,
h達y nh畉p vo chu畛i (*) nh動 tr棚n, n畉u h畛 th畛ng b叩o l畛i v畛 c炭 ph叩p d畉ng: Invalid object name
OtherTable; ta c坦 th畛 bi畉t ch畉c l h畛 th畛ng 達 th畛c hi畛n c但u SELECT sau t畛 kh坦a UNION, v狸 nh動
v畉y m畛i c坦 th畛 tr畉 v畛 l畛i m ta 達 c畛 t狸nh t畉o ra trong c但u l畛nh SELECT.
C滴ng s畉 c坦 th畉c m畉c l lm th畉 no c坦 th畛 bi畉t 動畛c t棚n c畛a c叩c b畉ng d畛 li畛u m th畛c hi畛n c叩c thao
t叩c ph叩 ho畉i khi 畛ng d畛ng web b畛 l畛i SQL injection. C滴ng r畉t 董n gi畉n, b畛i v狸 trong SQL Server, c坦
hai 畛i t動畛ng l sysobjects v syscolumns cho ph辿p li畛t k棚 t畉t c畉 c叩c t棚n b畉ng v c畛t c坦 trong h畛
th畛ng. Ta ch畛 c畉n ch畛nh l畉i c但u l畛nh SELECT, v鱈 d畛 nh動:
' UNION SELECT name FROM sysobjects WHERE xtype = 'U' l c坦 th畛 li畛t k棚 動畛c t棚n t畉t c畉 c叩c
b畉ng d畛 li畛u.

                                                3
2.3. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh INSERT
Th担ng th動畛ng c叩c 畛ng d畛ng web cho ph辿p ng動畛i d湛ng ng k鱈 m畛t ti kho畉n 畛 tham gia. Ch畛c
nng kh担ng th畛 thi畉u l sau khi ng k鱈 thnh c担ng, ng動畛i d湛ng c坦 th畛 xem v hi畛u ch畛nh th担ng tin
c畛a m狸nh. SQL injection c坦 th畛 動畛c d湛ng khi h畛 th畛ng kh担ng ki畛m tra t鱈nh h畛p l畛 c畛a th担ng tin
nh畉p vo.
V鱈 d畛, m畛t c但u l畛nh INSERT c坦 th畛 c坦 c炭 ph叩p d畉ng: INSERT INTO TableName VALUES('Value One',
'Value Two', 'Value Three'). N畉u o畉n m達 x但y d畛ng c但u l畛nh SQL c坦 d畉ng :

    <%
      strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _
     & strValueTwo & " ', ' " & strValueThree & " ') "

      Set objRS = Server.CreateObject("ADODB.Recordset")
      objRS.Open strSQL, "DSN=..."

     
     Set objRS = Nothing
    %>

Th狸 ch畉c ch畉n s畉 b畛 l畛i SQL injection, b畛i v狸 n畉u ta nh畉p vo tr動畛ng th畛 nh畉t v鱈 d畛 nh動: ' + (SELECT
TOP 1 FieldName FROM TableName) + '. L炭c ny c但u truy v畉n s畉 l: INSERT INTO TableName
VALUES(' ' + (SELECT TOP 1 FieldName FROM TableName) + ' ', 'abc', 'def'). Khi 坦, l炭c th畛c hi畛n
l畛nh xem th担ng tin, xem nh動 b畉n 達 y棚u c畉u th畛c hi畛n th棚m m畛t l畛nh n畛a 坦 l: SELECT TOP 1
FieldName FROM TableName
2.4. D畉ng t畉n c担ng s畛 d畛ng stored-procedures
Vi畛c t畉n c担ng b畉ng stored-procedures s畉 g但y t叩c h畉i r畉t l畛n n畉u 畛ng d畛ng 動畛c th畛c thi v畛i quy畛n
qu畉n tr畛 h畛 th畛ng 'sa'. V鱈 d畛, n畉u ta thay o畉n m達 ti棚m vo d畉ng: ' ; EXEC xp_cmdshell cmd.exe
dir C: '. L炭c ny h畛 th畛ng s畉 th畛c hi畛n l畛nh li畛t k棚 th動 m畛c tr棚n 畛 挑a C: ci 畉t server. Vi畛c ph叩
ho畉i ki畛u no tu畛 thu畛c vo c但u l畛nh 畉ng sau cmd.exe.
3. C叩ch ph嘆ng tr叩nh
Nh動 v畉y, c坦 th畛 th畉y l畛i SQL injection khai th叩c nh畛ng b畉t c畉n c畛a c叩c l畉p tr狸nh vi棚n ph叩t tri畛n 畛ng
d畛ng web khi x畛 l鱈 c叩c d畛 li畛u nh畉p vo 畛 x但y d畛ng c但u l畛nh SQL. T叩c h畉i t畛 l畛i SQL injection
t湛y thu畛c vo m担i tr動畛ng v c叩ch c畉u h狸nh h畛 th畛ng. N畉u 畛ng d畛ng s畛 d畛ng quy畛n dbo (quy畛n c畛a
ng動畛i s畛 h畛u c董 s畛 d畛 li畛u - owner) khi thao t叩c d畛 li畛u, n坦 c坦 th畛 x坦a ton b畛 c叩c b畉ng d畛 li畛u, t畉o
c叩c b畉ng d畛 li畛u m畛i,  N畉u 畛ng d畛ng s畛 d畛ng quy畛n sa (quy畛n qu畉n tr畛 h畛 th畛ng), n坦 c坦 th畛 i畛u
khi畛n ton b畛 h畛 qu畉n tr畛 c董 s畛 d畛 li畛u v v畛i quy畛n h畉n r畛ng l畛n nh動 v畉y n坦 c坦 th畛 t畉o ra c叩c ti
kho畉n ng動畛i d湛ng b畉t h畛p ph叩p 畛 i畛u khi畛n h畛 th畛ng c畛a b畉n. 畛 ph嘆ng tr叩nh, ta c坦 th畛 th畛c hi畛n
畛 hai m畛c:
3.1. Ki畛m so叩t ch畉t ch畉 d畛 li畛u nh畉p vo
畛 ph嘆ng tr叩nh c叩c nguy c董 c坦 th畛 x畉y ra, h達y b畉o v畛 c叩c c但u l畛nh SQL l b畉ng c叩ch ki畛m so叩t ch畉t
ch畉 t畉t c畉 c叩c d畛 li畛u nh畉p nh畉n 動畛c t畛 畛i t動畛ng Request (Request, Request.QueryString,
Request.Form, Request.Cookies, and Request.ServerVariables). V鱈 d畛, c坦 th畛 gi畛i h畉n chi畛u di c畛a
chu畛i nh畉p li畛u, ho畉c x但y d畛ng hm EscapeQuotes 畛 thay th畉 c叩c d畉u nh叩y 董n b畉ng 2 d畉u nh叩y
董n nh動:
    <%
    Function EscapeQuotes(sInput)
     sInput = replace(sInput, " ' ", " ' ' ")
     EscapeQuotes = sInput


                                                 4
End Function
     %>

Trong tr動畛ng h畛p d畛 li畛u nh畉p vo l s畛, l畛i xu畉t ph叩t t畛 vi畛c thay th畉 m畛t gi叩 tr畛 動畛c ti棚n o叩n l
d畛 li畛u s畛 b畉ng chu畛i ch畛a c但u l畛nh SQL b畉t h畛p ph叩p. 畛 tr叩nh i畛u ny, 董n gi畉n h達y ki畛m tra
d畛 li畛u c坦 炭ng ki畛u hay kh担ng b畉ng hm IsNumeric().
Ngoi ra c坦 th畛 x但y d畛ng hm lo畉i b畛 m畛t s畛 k鱈 t畛 v t畛 kh坦a nguy hi畛m nh動: ;, --, select, insert,
xp_,  ra kh畛i chu畛i d畛 li畛u nh畉p t畛 ph鱈a ng動畛i d湛ng 畛 h畉n ch畉 c叩c t畉n c担ng d畉ng ny:

     <%
     Function KillChars(sInput)
      dim badChars
      dim newChars

       badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_")
       newChars = strInput

       for i = 0 to uBound(badChars)
         newChars = replace(newChars, badChars(i), "")
       next

      KillChars = newChars
     End Function
     %>

3.2. Thi畉t l畉p c畉u h狸nh an ton cho h畛 qu畉n tr畛 c董 s畛 d畛 li畛u
C畉n c坦 c董 ch畉 ki畛m so叩t ch畉t ch畉 v gi畛i h畉n quy畛n x畛 l鱈 d畛 li畛u 畉n ti kho畉n ng動畛i d湛ng m 畛ng
d畛ng web ang s畛 d畛ng. C叩c 畛ng d畛ng th担ng th動畛ng n棚n tr叩nh d湛ng 畉n c叩c quy畛n nh動 dbo hay sa.
Quy畛n cng b畛 h畉n ch畉, thi畛t h畉i cng 鱈t.
Ngoi ra 畛 tr叩nh c叩c nguy c董 t畛 SQL Injection attack, n棚n ch炭 箪 lo畉i b畛 b畉t k狸 th担ng tin k挑 thu畉t
no ch畛a trong th担ng i畛p chuy畛n xu畛ng cho ng動畛i d湛ng khi 畛ng d畛ng c坦 l畛i. C叩c th担ng b叩o l畛i
th担ng th動畛ng ti畉t l畛 c叩c chi ti畉t k挑 thu畉t c坦 th畛 cho ph辿p k畉 t畉n c担ng bi畉t 動畛c i畛m y畉u c畛a h畛
th畛ng.
Tham chi畉u
[1]. Danh s叩ch c叩c website b畛 l畛i SQL injection: http://www.security.com.vn/
[2]. SQL Injection FAQ: http://www.sqlsecurity.com/DesktopDefault.aspx?tabindex=2&tabid=3
[3]. Advanced SQL Injection : http://www.nextgenss.com/papers/advanced_sql_injection.pdf
[4]. Preventing SQL Injection: http://www.owasp.org/asac/input_validation/sql.shtml
[5]. SQL Injection Attacks - Are You Safe? http://www.sitepoint.com/article/794




                                                         5

More Related Content

What's hot (19)

Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n applicationNh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Ngoc Dao
Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Sql injection lab_5477
Sql injection lab_5477Sql injection lab_5477
Sql injection lab_5477
oncestar
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select unionT畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
Nguy畛n Danh Thanh
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web applicationC担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
ducmanhkthd
Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chong
Vu Trung Kien
SQL Injection
SQL InjectionSQL Injection
SQL Injection
CongDoanVan1
Bao cao tttn an ninh web
Bao cao tttn   an ninh webBao cao tttn   an ninh web
Bao cao tttn an ninh web
Nh坦c M竪o
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
Luc Cao
PHP Security SQL injection
PHP Security SQL injectionPHP Security SQL injection
PHP Security SQL injection
Loc Nguyen
Ki畛m th畛 b畉o m畉t web
Ki畛m th畛 b畉o m畉t webKi畛m th畛 b畉o m畉t web
Ki畛m th畛 b畉o m畉t web
Minh Tri Nguyen
Tao mot ket noi toi co so du lieu dung c#
Tao mot ket noi toi co so du lieu dung c#Tao mot ket noi toi co so du lieu dung c#
Tao mot ket noi toi co so du lieu dung c#
truong le hung
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Nguyen Van Hung
Kiem tra javascript
Kiem tra javascriptKiem tra javascript
Kiem tra javascript
Pham Ngoc Long
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Nguy畛n Ng畛c Hong
Bao cao detai
Bao cao detaiBao cao detai
Bao cao detai
Sai Lemovom
Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieu
truong le hung
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
Hi畛n Ph湛ng
Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n applicationNh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Nh畛ng l畛i b畉o m畉t web th動畛ng g畉p 畛 ph畉n application
Ngoc Dao
Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Sql injection lab_5477
Sql injection lab_5477Sql injection lab_5477
Sql injection lab_5477
oncestar
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select unionT畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
T畉n c担ng sql injection s畛 d畛ng c但u l畛nh select union
Nguy畛n Danh Thanh
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web applicationC担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
C担ng c畛 v ph動董ng ph叩p ph叩t hi畛n l畛 h畛ng b畉o m畉t web application
ducmanhkthd
Tim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chongTim hieu ve lo hong web va cach phong chong
Tim hieu ve lo hong web va cach phong chong
Vu Trung Kien
Bao cao tttn an ninh web
Bao cao tttn   an ninh webBao cao tttn   an ninh web
Bao cao tttn an ninh web
Nh坦c M竪o
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
B叩o c叩o th畛c t畉p hng tu畉n - C叩c chu畉n b畉o m畉t web (OWASP)
Luc Cao
PHP Security SQL injection
PHP Security SQL injectionPHP Security SQL injection
PHP Security SQL injection
Loc Nguyen
Ki畛m th畛 b畉o m畉t web
Ki畛m th畛 b畉o m畉t webKi畛m th畛 b畉o m畉t web
Ki畛m th畛 b畉o m畉t web
Minh Tri Nguyen
Tao mot ket noi toi co so du lieu dung c#
Tao mot ket noi toi co so du lieu dung c#Tao mot ket noi toi co so du lieu dung c#
Tao mot ket noi toi co so du lieu dung c#
truong le hung
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Nguyen Van Hung
Kiem tra javascript
Kiem tra javascriptKiem tra javascript
Kiem tra javascript
Pham Ngoc Long
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Semina K畉t n畛i ngu畛n d畛 li畛u t畛 Internet
Nguy畛n Ng畛c Hong
Bao cao detai
Bao cao detaiBao cao detai
Bao cao detai
Sai Lemovom
Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieu
truong le hung
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
Hi畛n Ph湛ng

Similar to Sql injection2 (20)

Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Trong bi vi畉t h担m nay
Trong bi vi畉t h担m nayTrong bi vi畉t h担m nay
Trong bi vi畉t h担m nay
ledoanduc
Bai1.pdf
Bai1.pdfBai1.pdf
Bai1.pdf
TrnXunQuyn
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
nataliej4
4.thuc thi menh lenh voi co so du lieu
4.thuc thi menh lenh voi co so du lieu4.thuc thi menh lenh voi co so du lieu
4.thuc thi menh lenh voi co so du lieu
Dao Uit
Tetcon2012 gamma95 blind_sql_injection_optimization
Tetcon2012 gamma95 blind_sql_injection_optimizationTetcon2012 gamma95 blind_sql_injection_optimization
Tetcon2012 gamma95 blind_sql_injection_optimization
Xchym Hi畛p
Sql injection
Sql injectionSql injection
Sql injection
Linh Hoang
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
khanhtoankmz
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ngm畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
NguynQuangKhangMinh
Bai tap java_script-html-2016
Bai tap java_script-html-2016Bai tap java_script-html-2016
Bai tap java_script-html-2016
viethoang89
Dos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.comDos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.com
phanleson
3.tao mot ket noi toi co so du lieu dung c#
3.tao mot ket noi toi co so du lieu dung c#3.tao mot ket noi toi co so du lieu dung c#
3.tao mot ket noi toi co so du lieu dung c#
Dao Uit
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
Minh Tri Lam
Xay dung macro_visual_basic
Xay dung macro_visual_basicXay dung macro_visual_basic
Xay dung macro_visual_basic
Vu Van Menh
Tan cong
Tan congTan cong
Tan cong
toan
Web application-security
Web application-securityWeb application-security
Web application-security
Visla Team
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
23TrnhMDuynD16CNPM3
Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2Athena b叩o c叩o th畛c t畉p tu畉n 2
Athena b叩o c叩o th畛c t畉p tu畉n 2
Luc Cao
Trong bi vi畉t h担m nay
Trong bi vi畉t h担m nayTrong bi vi畉t h担m nay
Trong bi vi畉t h担m nay
ledoanduc
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
畛 叩n th畛c t畉p c董 s畛 c叩c k挑 thu畉t t畉n c担ng SQL injection v c叩ch ph嘆ng ch畛ng
nataliej4
4.thuc thi menh lenh voi co so du lieu
4.thuc thi menh lenh voi co so du lieu4.thuc thi menh lenh voi co so du lieu
4.thuc thi menh lenh voi co so du lieu
Dao Uit
Tetcon2012 gamma95 blind_sql_injection_optimization
Tetcon2012 gamma95 blind_sql_injection_optimizationTetcon2012 gamma95 blind_sql_injection_optimization
Tetcon2012 gamma95 blind_sql_injection_optimization
Xchym Hi畛p
Sql injection
Sql injectionSql injection
Sql injection
Linh Hoang
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
khanhtoankmz
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ngm畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
m畛t s畛 ph動董ng ph叩p t畉n c担ng v ph嘆ng ch畛ng trong kh担ng gian m畉ng
NguynQuangKhangMinh
Bai tap java_script-html-2016
Bai tap java_script-html-2016Bai tap java_script-html-2016
Bai tap java_script-html-2016
viethoang89
Dos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.comDos web server it-slideshares.blogspot.com
Dos web server it-slideshares.blogspot.com
phanleson
3.tao mot ket noi toi co so du lieu dung c#
3.tao mot ket noi toi co so du lieu dung c#3.tao mot ket noi toi co so du lieu dung c#
3.tao mot ket noi toi co so du lieu dung c#
Dao Uit
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
H動畛ng d畉n l畉p tr狸nh v畛i SCSF ph畉n I (smart client software factory)
Minh Tri Lam
Xay dung macro_visual_basic
Xay dung macro_visual_basicXay dung macro_visual_basic
Xay dung macro_visual_basic
Vu Van Menh
Tan cong
Tan congTan cong
Tan cong
toan
Web application-security
Web application-securityWeb application-security
Web application-security
Visla Team

Sql injection2

  • 1. T畉N CNG KI畛U SQL INJECTION - TC H畉I V PHNG TRNH L棚 狸nh Duy Khoa C担ng Ngh畛 Th担ng Tin, Tr動畛ng H Khoa H畛c T畛 Nhi棚n Tp. HCM. Email: ldduy@fit.hcmuns.edu.vn 1. SQL Injection l g狸? Khi tri畛n khai c叩c 畛ng d畛ng web tr棚n Internet, nhi畛u ng動畛i v畉n ngh挑 r畉ng vi畛c 畉m b畉o an ton, b畉o m畉t nh畉m gi畉m thi畛u t畛i a kh畉 nng b畛 t畉n c担ng t畛 c叩c tin t畉c ch畛 董n thu畉n t畉p trung vo c叩c v畉n 畛 nh動 ch畛n h畛 i畛u hnh, h畛 qu畉n tr畛 c董 s畛 d畛 li畛u, webserver s畉 ch畉y 畛ng d畛ng, ... m qu棚n m畉t r畉ng ngay c畉 b畉n th但n 畛ng d畛ng ch畉y tr棚n 坦 c滴ng ti畛m 畉n m畛t l畛 h畛ng b畉o m畉t r畉t l畛n. M畛t trong s畛 c叩c l畛 h畛ng ny 坦 l SQL injection. T畉i Vi畛t Nam, 達 qua th畛i k狸 c叩c qu畉n tr畛 website l董 l vi畛c qu辿t virus, c畉p nh畉t c叩c b畉n v叩 l畛i t畛 c叩c ph畉n m畛m h畛 th畛ng, nh動ng vi畛c chm s坦c c叩c l畛i c畛a c叩c 畛ng d畛ng l畉i r畉t 鱈t 動畛c quan t但m. 坦 l l鱈 do t畉i sao trong th畛i gian v畛a qua, kh担ng 鱈t website t畉i Vi畛t Nam b畛 t畉n c担ng v a s畛 畛u l l畛i SQL injection [1]. V畉y SQL injection l g狸 ? SQL injection l m畛t k挑 thu畉t cho ph辿p nh畛ng k畉 t畉n c担ng l畛i d畛ng l畛 h畛ng trong vi畛c ki畛m tra d畛 li畛u nh畉p trong c叩c 畛ng d畛ng web v c叩c th担ng b叩o l畛i c畛a h畛 qu畉n tr畛 c董 s畛 d畛 li畛u 畛 "ti棚m vo" (inject) v thi hnh c叩c c但u l畛nh SQL b畉t h畛p ph叩p (kh担ng 動畛c ng動畛i ph叩t tri畛n 畛ng d畛ng l動畛ng tr動畛c). H畉u qu畉 c畛a n坦 r畉t tai h畉i v狸 n坦 cho ph辿p nh畛ng k畉 t畉n c担ng c坦 th畛 th畛c hi畛n c叩c thao t叩c x坦a, hi畛u ch畛nh, do c坦 ton quy畛n tr棚n c董 s畛 d畛 li畛u c畛a 畛ng d畛ng, th畉m ch鱈 l server m 畛ng d畛ng 坦 ang ch畉y. L畛i ny th動畛ng x畉y ra tr棚n c叩c 畛ng d畛ng web c坦 d畛 li畛u 動畛c qu畉n l鱈 b畉ng c叩c h畛 qu畉n tr畛 c董 s畛 d畛 li畛u nh動 SQL Server, MySQL, Oracle, DB2, Sysbase. 2. C叩c d畉ng t畉n c担ng b畉ng SQL Injection C坦 b畛n d畉ng th担ng th動畛ng bao g畛m: v動畛t qua ki畛m tra l炭c ng nh畉p (authorization bypass), s畛 d畛ng c但u l畛n SELECT, s畛 d畛ng c但u l畛nh INSERT, s畛 d畛ng c叩c stored-procedures [2], [3]. 2.1. D畉ng t畉n c担ng v動畛t qua ki畛m tra ng nh畉p V畛i d畉ng t畉n c担ng ny, tin t畉c c坦 th畛 d畛 dng v動畛t qua c叩c trang ng nh畉p nh畛 vo l畛i khi d湛ng c叩c c但u l畛nh SQL thao t叩c tr棚n c董 s畛 d畛 li畛u c畛a 畛ng d畛ng web. X辿t m畛t v鱈 d畛 i畛n h狸nh, th担ng th動畛ng 畛 cho ph辿p ng動畛i d湛ng truy c畉p vo c叩c trang web 動畛c b畉o m畉t, h畛 th畛ng th動畛ng x但y d畛ng trang ng nh畉p 畛 y棚u c畉u ng動畛i d湛ng nh畉p th担ng tin v畛 t棚n ng nh畉p v m畉t kh畉u. Sau khi ng動畛i d湛ng nh畉p th担ng tin vo, h畛 th畛ng s畉 ki畛m tra t棚n ng nh畉p v m畉t kh畉u c坦 h畛p l畛 hay kh担ng 畛 quy畉t 畛nh cho ph辿p hay t畛 ch畛i th畛c hi畛n ti畉p. Trong tr動畛ng h畛p ny, ng動畛i ta c坦 th畛 d湛ng hai trang, m畛t trang HTML 畛 hi畛n th畛 form nh畉p li畛u v m畛t trang ASP d湛ng 畛 x畛 l鱈 th担ng tin nh畉p t畛 ph鱈a ng動畛i d湛ng. V鱈 d畛: login.htm <form action="ExecLogin.asp" method="post"> Username: <input type="text" name="fUSRNAME"><br> Password: <input type="password" name="fPASSWORD"><br> <input type="submit"> </form> 1
  • 2. execlogin.asp <% Dim vUsrName, vPassword, objRS, strSQL vUsrName = Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD") strSQL = "SELECT * FROM T_USERS " & _ "WHERE USR_NAME=' " & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." If (objRS.EOF) Then Response.Write "Invalid login." Else Response.Write "You are logged in as " & objRS("USR_NAME") End If Set objRS = Nothing %> Tho畉t nh狸n, o畉n m達 trong trang execlogin.asp d動畛ng nh動 kh担ng ch畛a b畉t c畛 m畛t l畛 h畛ng v畛 an ton no. Ng動畛i d湛ng kh担ng th畛 ng nh畉p m kh担ng c坦 t棚n ng nh畉p v m畉t kh畉u h畛p l畛. Tuy nhi棚n, o畉n m達 ny th畛c s畛 kh担ng an ton v l ti畛n 畛 cho m畛t l畛i SQL injection. 畉c bi畛t, ch畛 s董 h畛 n畉m 畛 ch畛 d畛 li畛u nh畉p vo t畛 ng動畛i d湛ng 動畛c d湛ng 畛 x但y d畛ng tr畛c ti畉p c但u l畛nh SQL. Ch鱈nh i畛u ny cho ph辿p nh畛ng k畉 t畉n c担ng c坦 th畛 i畛u khi畛n c但u truy v畉n s畉 動畛c th畛c hi畛n. V鱈 d畛, n畉u ng動畛i d湛ng nh畉p chu畛i sau vo trong c畉 2 担 nh畉p li畛u username/password c畛a trang login.htm l: ' OR ' ' = ' '. L炭c ny, c但u truy v畉n s畉 動畛c g畛i th畛c hi畛n l: SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''='' C但u truy v畉n ny l h畛p l畛 v s畉 tr畉 v畛 t畉t c畉 c叩c b畉n ghi c畛a T_USERS v o畉n m達 ti畉p theo x畛 l鱈 ng動畛i d湛ng ng nh畉p b畉t h畛p ph叩p ny nh動 l ng動畛i d湛ng ng nh畉p h畛p l畛. 2.2. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh SELECT D畉ng t畉n c担ng ny ph畛c t畉p h董n. 畛 th畛c hi畛n 動畛c ki畛u t畉n c担ng ny, k畉 t畉n c担ng ph畉i c坦 kh畉 nng hi畛u v l畛i d畛ng c叩c s董 h畛 trong c叩c th担ng b叩o l畛i t畛 h畛 th畛ng 畛 d嘆 t狸m c叩c i畛m y畉u kh畛i 畉u cho vi畛c t畉n c担ng. X辿t m畛t v鱈 d畛 r畉t th動畛ng g畉p trong c叩c website v畛 tin t畛c. Th担ng th動畛ng, s畉 c坦 m畛t trang nh畉n ID c畛a tin c畉n hi畛n th畛 r畛i sau 坦 truy v畉n n畛i dung c畛a tin c坦 ID ny. V鱈 d畛: http://www.myhost.com/shownews.asp?ID=123. M達 ngu畛n cho ch畛c nng ny th動畛ng 動畛c vi畉t kh叩 董n gi畉n theo d畉ng <% Dim vNewsID, objRS, strSQL vNewsID = Request("ID") strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID 2
  • 3. Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> Trong c叩c t狸nh hu畛ng th担ng th動畛ng, o畉n m達 ny hi畛n th畛 n畛i dung c畛a tin c坦 ID tr湛ng v畛i ID 達 ch畛 畛nh v h畉u nh動 kh担ng th畉y c坦 l畛i. Tuy nhi棚n, gi畛ng nh動 v鱈 d畛 ng nh畉p 畛 tr動畛c, o畉n m達 ny 畛 l畛 s董 h畛 cho m畛t l畛i SQL injection kh叩c. K畉 t畉n c担ng c坦 th畛 thay th畉 m畛t ID h畛p l畛 b畉ng c叩ch g叩n ID cho m畛t gi叩 tr畛 kh叩c, v t畛 坦, kh畛i 畉u cho m畛t cu畛c t畉n c担ng b畉t h畛p ph叩p, v鱈 d畛 nh動: 0 OR 1=1 (ngh挑a l, http://www.myhost.com/shownews.asp?ID=0 or 1=1). C但u truy v畉n SQL l炭c ny s畉 tr畉 v畛 t畉t c畉 c叩c article t畛 b畉ng d畛 li畛u v狸 n坦 s畉 th畛c hi畛n c但u l畛nh: SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1 M畛t tr動畛ng h畛p kh叩c, v鱈 d畛 nh動 trang t狸m ki畉m. Trang ny cho ph辿p ng動畛i d湛ng nh畉p vo c叩c th担ng tin t狸m ki畉m nh動 H畛, T棚n, o畉n m達 th動畛ng g畉p l: <% Dim vAuthorName, objRS, strSQL vAuthorName = Request("fAUTHOR_NAME") strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _ vAuthorName & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> T動董ng t畛 nh動 tr棚n, tin t畉c c坦 th畛 l畛i d畛ng s董 h畛 trong c但u truy v畉n SQL 畛 nh畉p vo tr動畛ng t棚n t叩c gi畉 b畉ng chu畛i gi叩 tr畛: ' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) L炭c ny, ngoi c但u truy v畉n 畉u kh担ng thnh c担ng, ch動董ng tr狸nh s畉 th畛c hi畛n th棚m l畛nh ti畉p theo sau t畛 kh坦a UNION n畛a. T畉t nhi棚n c叩c v鱈 d畛 n坦i tr棚n, d動畛ng nh動 kh担ng c坦 g狸 nguy hi畛m, nh動ng h達y th畛 t動畛ng t動畛ng k畉 t畉n c担ng c坦 th畛 x坦a ton b畛 c董 s畛 d畛 li畛u b畉ng c叩ch ch竪n vo c叩c o畉n l畛nh nguy hi畛m nh動 l畛nh DROP TABLE. V鱈 d畛 nh動: ' DROP TABLE T_AUTHORS -- Ch畉c c叩c b畉n s畉 th畉c m畉c l lm sao bi畉t 動畛c 畛ng d畛ng web b畛 l畛i d畉ng ny 動畛c. R畉t 董n gi畉n, h達y nh畉p vo chu畛i (*) nh動 tr棚n, n畉u h畛 th畛ng b叩o l畛i v畛 c炭 ph叩p d畉ng: Invalid object name OtherTable; ta c坦 th畛 bi畉t ch畉c l h畛 th畛ng 達 th畛c hi畛n c但u SELECT sau t畛 kh坦a UNION, v狸 nh動 v畉y m畛i c坦 th畛 tr畉 v畛 l畛i m ta 達 c畛 t狸nh t畉o ra trong c但u l畛nh SELECT. C滴ng s畉 c坦 th畉c m畉c l lm th畉 no c坦 th畛 bi畉t 動畛c t棚n c畛a c叩c b畉ng d畛 li畛u m th畛c hi畛n c叩c thao t叩c ph叩 ho畉i khi 畛ng d畛ng web b畛 l畛i SQL injection. C滴ng r畉t 董n gi畉n, b畛i v狸 trong SQL Server, c坦 hai 畛i t動畛ng l sysobjects v syscolumns cho ph辿p li畛t k棚 t畉t c畉 c叩c t棚n b畉ng v c畛t c坦 trong h畛 th畛ng. Ta ch畛 c畉n ch畛nh l畉i c但u l畛nh SELECT, v鱈 d畛 nh動: ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' l c坦 th畛 li畛t k棚 動畛c t棚n t畉t c畉 c叩c b畉ng d畛 li畛u. 3
  • 4. 2.3. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh INSERT Th担ng th動畛ng c叩c 畛ng d畛ng web cho ph辿p ng動畛i d湛ng ng k鱈 m畛t ti kho畉n 畛 tham gia. Ch畛c nng kh担ng th畛 thi畉u l sau khi ng k鱈 thnh c担ng, ng動畛i d湛ng c坦 th畛 xem v hi畛u ch畛nh th担ng tin c畛a m狸nh. SQL injection c坦 th畛 動畛c d湛ng khi h畛 th畛ng kh担ng ki畛m tra t鱈nh h畛p l畛 c畛a th担ng tin nh畉p vo. V鱈 d畛, m畛t c但u l畛nh INSERT c坦 th畛 c坦 c炭 ph叩p d畉ng: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three'). N畉u o畉n m達 x但y d畛ng c但u l畛nh SQL c坦 d畉ng : <% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing %> Th狸 ch畉c ch畉n s畉 b畛 l畛i SQL injection, b畛i v狸 n畉u ta nh畉p vo tr動畛ng th畛 nh畉t v鱈 d畛 nh動: ' + (SELECT TOP 1 FieldName FROM TableName) + '. L炭c ny c但u truy v畉n s畉 l: INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM TableName) + ' ', 'abc', 'def'). Khi 坦, l炭c th畛c hi畛n l畛nh xem th担ng tin, xem nh動 b畉n 達 y棚u c畉u th畛c hi畛n th棚m m畛t l畛nh n畛a 坦 l: SELECT TOP 1 FieldName FROM TableName 2.4. D畉ng t畉n c担ng s畛 d畛ng stored-procedures Vi畛c t畉n c担ng b畉ng stored-procedures s畉 g但y t叩c h畉i r畉t l畛n n畉u 畛ng d畛ng 動畛c th畛c thi v畛i quy畛n qu畉n tr畛 h畛 th畛ng 'sa'. V鱈 d畛, n畉u ta thay o畉n m達 ti棚m vo d畉ng: ' ; EXEC xp_cmdshell cmd.exe dir C: '. L炭c ny h畛 th畛ng s畉 th畛c hi畛n l畛nh li畛t k棚 th動 m畛c tr棚n 畛 挑a C: ci 畉t server. Vi畛c ph叩 ho畉i ki畛u no tu畛 thu畛c vo c但u l畛nh 畉ng sau cmd.exe. 3. C叩ch ph嘆ng tr叩nh Nh動 v畉y, c坦 th畛 th畉y l畛i SQL injection khai th叩c nh畛ng b畉t c畉n c畛a c叩c l畉p tr狸nh vi棚n ph叩t tri畛n 畛ng d畛ng web khi x畛 l鱈 c叩c d畛 li畛u nh畉p vo 畛 x但y d畛ng c但u l畛nh SQL. T叩c h畉i t畛 l畛i SQL injection t湛y thu畛c vo m担i tr動畛ng v c叩ch c畉u h狸nh h畛 th畛ng. N畉u 畛ng d畛ng s畛 d畛ng quy畛n dbo (quy畛n c畛a ng動畛i s畛 h畛u c董 s畛 d畛 li畛u - owner) khi thao t叩c d畛 li畛u, n坦 c坦 th畛 x坦a ton b畛 c叩c b畉ng d畛 li畛u, t畉o c叩c b畉ng d畛 li畛u m畛i, N畉u 畛ng d畛ng s畛 d畛ng quy畛n sa (quy畛n qu畉n tr畛 h畛 th畛ng), n坦 c坦 th畛 i畛u khi畛n ton b畛 h畛 qu畉n tr畛 c董 s畛 d畛 li畛u v v畛i quy畛n h畉n r畛ng l畛n nh動 v畉y n坦 c坦 th畛 t畉o ra c叩c ti kho畉n ng動畛i d湛ng b畉t h畛p ph叩p 畛 i畛u khi畛n h畛 th畛ng c畛a b畉n. 畛 ph嘆ng tr叩nh, ta c坦 th畛 th畛c hi畛n 畛 hai m畛c: 3.1. Ki畛m so叩t ch畉t ch畉 d畛 li畛u nh畉p vo 畛 ph嘆ng tr叩nh c叩c nguy c董 c坦 th畛 x畉y ra, h達y b畉o v畛 c叩c c但u l畛nh SQL l b畉ng c叩ch ki畛m so叩t ch畉t ch畉 t畉t c畉 c叩c d畛 li畛u nh畉p nh畉n 動畛c t畛 畛i t動畛ng Request (Request, Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariables). V鱈 d畛, c坦 th畛 gi畛i h畉n chi畛u di c畛a chu畛i nh畉p li畛u, ho畉c x但y d畛ng hm EscapeQuotes 畛 thay th畉 c叩c d畉u nh叩y 董n b畉ng 2 d畉u nh叩y 董n nh動: <% Function EscapeQuotes(sInput) sInput = replace(sInput, " ' ", " ' ' ") EscapeQuotes = sInput 4
  • 5. End Function %> Trong tr動畛ng h畛p d畛 li畛u nh畉p vo l s畛, l畛i xu畉t ph叩t t畛 vi畛c thay th畉 m畛t gi叩 tr畛 動畛c ti棚n o叩n l d畛 li畛u s畛 b畉ng chu畛i ch畛a c但u l畛nh SQL b畉t h畛p ph叩p. 畛 tr叩nh i畛u ny, 董n gi畉n h達y ki畛m tra d畛 li畛u c坦 炭ng ki畛u hay kh担ng b畉ng hm IsNumeric(). Ngoi ra c坦 th畛 x但y d畛ng hm lo畉i b畛 m畛t s畛 k鱈 t畛 v t畛 kh坦a nguy hi畛m nh動: ;, --, select, insert, xp_, ra kh畛i chu畛i d畛 li畛u nh畉p t畛 ph鱈a ng動畛i d湛ng 畛 h畉n ch畉 c叩c t畉n c担ng d畉ng ny: <% Function KillChars(sInput) dim badChars dim newChars badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") newChars = strInput for i = 0 to uBound(badChars) newChars = replace(newChars, badChars(i), "") next KillChars = newChars End Function %> 3.2. Thi畉t l畉p c畉u h狸nh an ton cho h畛 qu畉n tr畛 c董 s畛 d畛 li畛u C畉n c坦 c董 ch畉 ki畛m so叩t ch畉t ch畉 v gi畛i h畉n quy畛n x畛 l鱈 d畛 li畛u 畉n ti kho畉n ng動畛i d湛ng m 畛ng d畛ng web ang s畛 d畛ng. C叩c 畛ng d畛ng th担ng th動畛ng n棚n tr叩nh d湛ng 畉n c叩c quy畛n nh動 dbo hay sa. Quy畛n cng b畛 h畉n ch畉, thi畛t h畉i cng 鱈t. Ngoi ra 畛 tr叩nh c叩c nguy c董 t畛 SQL Injection attack, n棚n ch炭 箪 lo畉i b畛 b畉t k狸 th担ng tin k挑 thu畉t no ch畛a trong th担ng i畛p chuy畛n xu畛ng cho ng動畛i d湛ng khi 畛ng d畛ng c坦 l畛i. C叩c th担ng b叩o l畛i th担ng th動畛ng ti畉t l畛 c叩c chi ti畉t k挑 thu畉t c坦 th畛 cho ph辿p k畉 t畉n c担ng bi畉t 動畛c i畛m y畉u c畛a h畛 th畛ng. Tham chi畉u [1]. Danh s叩ch c叩c website b畛 l畛i SQL injection: http://www.security.com.vn/ [2]. SQL Injection FAQ: http://www.sqlsecurity.com/DesktopDefault.aspx?tabindex=2&tabid=3 [3]. Advanced SQL Injection : http://www.nextgenss.com/papers/advanced_sql_injection.pdf [4]. Preventing SQL Injection: http://www.owasp.org/asac/input_validation/sql.shtml [5]. SQL Injection Attacks - Are You Safe? http://www.sitepoint.com/article/794 5