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 (1.55 MB, 30 trang )
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
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 %>
Chỗ sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào 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 này
cho phép tin tặc 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 trong ngoặc sau vào trong cả hai ô 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ệ.
II.
Dạng tấn công sử dụng câu lệnh SELECT
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 10
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
Dạng tấn công này phức tạp hơ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ơ 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. Ví dụ, trong các
trang tìm kiếm. Các trang này cho phép người dùng nhập vào 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 vào trường tên tác giả bằng chuỗi giá trị:
' 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. 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.
III.
Dạng tấn công sử dụng câu lệnh INSERT
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 11
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
Thông thường các ứng dụng web cho phép người dùng đăng ký một tài khoản
để tham gia. 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. 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 SQLi, bởi vì nếu ta nhập vào trường thứ nhất ví dụ
như:
' + (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
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 12
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
IV.
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 ‘cmdd.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.
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 13
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
CHƯƠNG III: MÔ PHỎNG TẤN CÔNG WEBSERVER
BẰ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.
I.
Thực hiện SQL Injection bằng Hackbar trên FireFox
Tool cần chuẩn bị: Add-on FireFox Hackbar
Để tìm một trang web có khả năng dính lỗi, ta tìm kiếm Google bằng lệnh
sau:
Có rất nhiều web hiện ra, ví dụ ta truy cập trang web đầu tiên:
http://www.hoanghaidoor.vn/?frame=product_detail&id=705
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 14
BÁO CÁO ĐỒ ÁN MÔN HỌC NHÓM 05
Để phát hiện một ứng dụng web có dính lỗi SQL Injection hay không, ta thêm
vào câu truy vấn các meta character trong các hệ quản trị cơ sở dữ liệu, chẳng
hạn như dấu nháy đơn, dấu nháy kép, dấu chấm phẩy và các ký tự comment
(--, ##, /**/, %)… và chờ xem ứng dụng web sẽ xứ lý câu truy vấn đó như
thế nào.
+
+
+
Dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi.
Ta thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm
tra có lỗi hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.
Dấu thăng (#) và dấu (): các dấu này để đánh dấu chú thích, nghĩa là
những kí tự đứng sau một trong hai dấu này trên cùng một dòng sẽ
được xem là chú thích được bỏ qua khi thực hiện truy vấn.
Dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu
một truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.
Thêm vào cuối liên kết trên một trong các meta character đã nói ở trên, chẳng
hạn
ta
thêm
vào
dấu
nháy
đơn:
http://www.hoanghaidoor.vn/?frame=product_detail&id=705’
SV BM. MẠNG MÁY TÍNH – KHÓA 58
Page 15