BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NHA TRANG
KHOA CÔNG NGHỆ THÔNG TIN
_______________________________
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
Đề tài :
Phát hiện và ngăn chặn tấn công bằng SQL
INJECTION vào cơ sở dữ liệu sử dụng Web service
GVHD: Th.S NGÔ VĂN CÔNG
SVTH: VĨNH THÁI CƯỜNG
LỚP: 49-THM
MSSV: 4913071009
NHA TRANG -NĂM 2011
LỜI NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
…………………………………………………………………………………………
LỜI NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
MỤC LỤC
CHƯƠNG 1 : TỔNG QUAN VỀ SQL INJECTION...................................................................8
Đặt vấn đề .....................................................................................................................8
1.1
1.1.1
Đặc trưng của các ứng dụng sử dụng cơ sở dữ liệu..............................................8
1.1.2
Tính chất nghiêm trọng của các cuộc tấn công. ...................................................9
a)
Các thống kê lịch sử ..................................................................................................9
b)
Các thống kê an ninh ..............................................................................................10
SQL Injection..............................................................................................................13
1.2
1.2.1
Khái niệm SQL Injection ....................................................................................13
1.2.2
Nguyên nhân gây ra lỗi SQL Injection ...............................................................14
a)
Không kiểm tra dữ liệu đầu vào .............................................................................14
b)
Xử lý không đúng kiểu............................................................................................14
c)
Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu ........................................................15
1.2.3
Tác hại từ các cuộc tấn công SQL Injection .......................................................16
Tổng kết chương .........................................................................................................16
1.3
CHƯƠNG 2 : CÁC HÌNH THỨC TẤN CÔNG SQL INJECTION PHỔ BIẾN ............................18
Các hình thức tấn công SQL Injection phổ biến........................................................18
2.1
2.1.1
Vượt qua kiểm tra lúc đăng nhập (Bypass Login) .............................................18
2.1.2
Dạng tấn công thu thập thông tin dựa trên các phản hồi từ database...............20
a)
Tìm điểm yếu của website .......................................................................................20
b)
Tìm kiếm các thông tin về cơ sở dữ liệu .................................................................21
c)
Tìm kiếm trang quản trị .........................................................................................26
d)
Tiến hành phá hoại .................................................................................................26
e)
Kết luận ...................................................................................................................26
2.1.3
Blind SQL Injection ............................................................................................27
2.1.3.1
Thực hiện tấn công Blind SQL Injection dựa trên phản hồi .........................28
2.1.3.2
Thực hiện tấn công Blind SQL Injection dựa trên độ trễ truy vấn ...............30
2.1.4
Dạng tấn công sử dụng các stored-procedure. ...................................................32
2.1.5
Một số cách qua mặt bộ lọc đầu vào. ..................................................................33
2.2
Cách phòng tránh SQL Injection ...............................................................................34
2.2.1
Về phía người quản trị website ...........................................................................34
2.2.2
Về phía server .....................................................................................................36
2.3
Tổng kết chương .........................................................................................................37
CHƯƠNG 3 : DỊCH VỤ WEB (WEB SERVICE).........................................................................38
3.1
Tìm hiểu về Web Service. ...........................................................................................38
3.2
Đặc điểm của dịch vụ web ..........................................................................................41
3.2.1
Đặc điểm..............................................................................................................41
3.2.2
Ưu và nhược điểm ...............................................................................................42
3.2.3
Kiến trúc của dịch vụ web ..................................................................................43
3.2.4
Các thành phần của dịch vụ web ........................................................................45
3.2.4.1
XML – eXtensible Markup Language ............................................................45
3.2.4.2
WSDL - Web Service Description Language .................................................46
3.2.4.3
Universal Description, Discovery, and Integration (UDDI) ...........................47
3.2.4.4
SOAP - Simple Object Access Protocol ..........................................................48
3.2.5
An toàn cho dịch vụ Web ....................................................................................50
3.2.6
Xây dựng một dịch vụ Web ................................................................................52
3.2.7
Tích hợp dịch vụ Web theo chuẩn ......................................................................53
3.3
Xây dựng một web service đơn giản ..........................................................................55
3.4
Tổng kết chương .........................................................................................................59
CHƯƠNG 4 : PHÒNG CHỐNG SQL INJECTION BẰNG WEB SERVICE ...............................60
4.1
Đặt vấn đề ...................................................................................................................60
4.2
Cơ sở lý thuyết ............................................................................................................60
4.3
Nguyên tắc hoạt động .................................................................................................62
4.4
Triển khai thực tế. ......................................................................................................63
4.4.1
Dịch vụ killChars .................................................................................................63
4.4.2
Dịch vụ Db_2_XML .............................................................................................64
4.4.3
Dịch vụ XPath_XML_Validation .........................................................................65
4.4.4
Kiểm tra tính hiệu quả của web service. ............................................................66
4.5
Hướng phát triển ........................................................................................................67
KẾT LUẬN .................................................................................................................................68
LỜI MỞ ĐẦU
Ngày nay, vấn đề bảo mật an ninh hệ thống mạng là một phần rất quan
trọng của các công ty, tập đoàn, các tổ chức cơ quan, chính phủ trong cuộc
sống xã hội hiện đại. Vấn đề an ninh và bảo mật là chìa khóa tất yếu thành
công trong các lĩnh vực kinh tế, chính trị, an ninh quốc phòng và góp phần
thúc đẩy sự phát triển toàn cầu nhanh chóng, liên kết khoảng cách địa lý,
không gian, thời gian các nơi trên thế giới gần với nhau mà vẫn đảm bảo được
an toàn.
Thông thường, các nhà phát triển đa số tập trung vào các vấn đề an toàn
trong việc chọn hệ điều hành, hệ quản trị CSDL, webserver sẽ chạy ứng dụng
gì, ... Ví dụ, người ta thường quan tâm nhiều đến các lỗ hổng về an toàn trên
Iternet Information Services (IIS) hơn là quan tâm đến các đoạn mã của ứng
dụng có tiềm ẩn các lỗ hổng nghiêm trọng hay không. Một trong số các lỗ
hổng này đó là SQL injection attack.
Tại Việt Nam, đã qua thời kì các quản trị website lơ là việc quét virus,
cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc các
lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lí do tại sao trong thời
gian vừa qua, không ít website tại Việt Nam bị tấn công và đa số đều là lỗi
SQL injection. Vậy SQL injection là gì ? Nguyên nhân ? Hậu quả ? Cách
phòng tránh ?
Được sự hướng dẫn nhiệt tình và chu đáo của thầy Ngô Văn Công, trong 3
tháng làm đề tài tốt nghiệp, em đã tìm hiểu và nghiên cứu đề tài : “Phát hiện và
ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng Web
service”.
Thông qua đề tài này, em muốn giới thiệu đến mọi người một cái nhìn tổng
quan về SQL Injection, khái niệm, nguyên nhân, hậu quả, các phương pháp tấn
công phổ biến, cách khắc phục … Từ đó, giúp cho các bạn trẻ mới bước vào thế
giới lập trình có nền tảng về vấn đề bảo mật, an ninh mạng, xây dựng được những
website có độ an toàn cao.
Đề tài của em cũng đề cập đến một loại hình đang phát triển thời gian gần
đây là Web Service (Dịch vụ mạng), ưu – nhược điểm, các thành phần chủ yếu,
cách xây dựng, bảo mật cho web service …
Từ đó, em kết hợp 2 vấn đề trên tạo nên một giải pháp phòng chống SQL
Injection mới bằng webservice. Đây là phương pháp hứa hẹn có thể giải quyết triệt
để các cuộc tấn công SQL Injection mà các phương pháp trước đây chưa hoàn thiện.
Trong phạm vi kiên thức của mình, em xin trình bày những hiểu biết của em
về “Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu
sử dụng Web service”.” trong bài đồ án này.
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
CHƯƠNG 1
TỔNG QUAN VỀ SQL INJECTION
1.1
Đặt vấn đề
1.1.1
Đặc trưng của các ứng dụng sử dụng cơ sở dữ liệu
Hiện nay, không khó để nhận ra rằng những ứng dụng phổ biến nhất và
chiếm thị phần cũng như doanh thu cao nhất đều là những ứng dụng hỗ trợ
tính năng quản lý. Dữ liệu là thứ sống còn trong mọi hoạt động nghiệp vụ
hiện tại. Chính vì lý do đó, các ứng dụng nghiệp vụ hiện tại đều xây dựng trên
những mô hình phát triển gắn liền với cơ sở dữ liệu. An toàn của dữ liệu phụ
thuộc vào độ bảo mật của ứng dụng web kết nối tới cơ sở dữ liệu.
Các mô hình phát triển ứng dụng Web hiện tại được sử dụng phổ biến
nhất là 3 tầng, ngoài ra còn có một số bản cải tiến, mở rộng mô hình này
nhằm những mục đích riêng.
Hình 1-1. Mô hình ứng dụng 3 tầng
SVTH: Vĩnh Thái Cường - 49THM
Page 8
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
Hình 1-2. Mô hình ứng dụng 4 tầng
Các mô hình trên luôn có một số điểm chung, đó là database server
chỉ làm nhiệm vụ lưu trữ dữ liệu, database hồi đáp những truy vấn dữ liệu
được xây dựng theo chuẩn (ví dụ như SQL). Mọi thao tác xử lý dữ liệu input,
output của database server đều được ứng dụng web ở tầng Logic xử lý. Các
vấn đề an ninh phát sinh đa phần sẽ nằm ở tầng này.
1.1.2
Tính chất nghiêm trọng của các cuộc tấn công.
a) Các thống kê lịch sử
- Ngày 01/11/2005, một hacker tuổi vị thành niên đã sử dụng SQL
injection để xâm nhập trang chủ của một tạp chí an ninh thông tin Đài
Loan từ nhóm Tech Target và ăn cắp thông tin khách hàng.
- Ngày 13/01/2006, tội phạm máy tính Nga đã xâp nhập trang web của
chính phủ đảo Rhode và ăn cắp dữ liệu thẻ tín dụng từ những cá nhân
đã giao dịch với các cơ quan nhà nước.
- Ngày 29/07/2007, một tội phạm máy tính đã bôi nhọ trang web của
Microsoft tại Vương quốc Anh bằng SQL injection. Trang web The
Register của Anh đã dẫn lời phát ngôn viên của Microsoft thừa nhận
vấn đề này.
SVTH: Vĩnh Thái Cường - 49THM
Page 9
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
- Vào tháng 1 năm 2008, hàng chục ngàn máy tính cá nhân đã bị nhiễm
một mã SQL injection tự động. Loại mã độc này đã khai thác một lỗ
hổng trong đoạn mã chương trình sử dụng Microsoft SQL Server
- Cuộc tấn công website BGD&ĐT www.moet.gov.vn ngày 27.11.2006
- Một trong những vụ tấn công SQL Injection nổi tiếng nhất là vụ tấn
công vào CardSystems Solutions.
b) Các thống kê an ninh
Theo WhiteHat - một tổ chức có uy tín trong việc nghiên cứu và hỗ
trợ các vấn đề an ninh mạng, SQL Injection nằm trong 10 lỗi bảo mật phổ
biến nhất hiện nay.
10 lỗi bảo mật phổ biến gần đây nhất :
Hình 1-3. Thống kê 10 lỗi bảo mật phổ biến nhất (3/2008)
SVTH: Vĩnh Thái Cường - 49THM
Page 10
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
Hình 1-4. Thống kê 10 lỗi bảo mật phổ biến nhất (2/2009)
Thời gian trung bình cần để khắc phục các lỗ hổng bảo mật :
Hình 1-5. Thống kê thời gian trung bình khắc phục các lỗ hổng bảo mật (8/2008)
SVTH: Vĩnh Thái Cường - 49THM
Page 11
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
Hình 1-6. Thống kê thời gian trung bình khắc phục các lỗ hổng bảo mật (2/2009)
Tỉ lệ lỗ hổng bảo mật thường xuyên bị khai thác :
Hình 1-7. Thống kê tỉ lệ lỗ hổng bảo mật thường xuyên bị khai thác (2/2010)
SVTH: Vĩnh Thái Cường - 49THM
Page 12
Đồ án tốt nghiệp đại học
1.2
GVHD: Th.S Ngô Văn Công
SQL Injection.
1.2.1 Khái niệm SQL Injection
SQL injection là kĩ thuật tấn công web lợi dụng lỗ hổng trong việc
kiểm tra dữ liệu đầu vào của ứng dụng web và các thông báo lỗi của hệ quản
trị cơ sở dữ liệu.
Nó cho phép kẻ tấn công chèn vào các đoạn mã SQL bất hợp pháp
với mục đích khai thác lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu của một
ứng dụng. Lỗ hổng bảo mật này có thể xuất hiện khi ứng dụng không có sự
kiểm tra chuỗi ký tự đầu vào trong câu truy vấn SQL, hoặc do sự định kiểu
đầu vào không rõ ràng, hay do lỗi cú pháp SQL của lập trình viên khiến cho
một đoạn mã độc hại có thể được xử lý ngoài ý muốn.
SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao
tác người tấn công cần được thực hiện với một trình duyệt web, có thể kèm
theo một ứng dụng proxy server. Chính vì đơn giản như vậy cho nên bất cứ ai
cũng có thể học cách tiến hành một cuộc tấn công. Lỗi bắt nguồn từ mã nguồn
của ứng dụng web chứ không phải từ phía database, chính vì thế bất cứ thành
phần nào của ứng dụng mà người dùng có thể tương tác được để điều khiển
nội dung (ví dụ : các form, tham số URL, cookie, tham số referrer, user-agent,
…) đều có thể được sử dụng để tiến hành chèn truy vấn có hại.
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ị CSDL như MySQL, SQL Server, Oracle, DB2, Sysbase
…
Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như
Internet Explorer, FireFox, Chrome, Netscape, Lynx, ...
SVTH: Vĩnh Thái Cường - 49THM
Page 13
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
1.2.2 Nguyên nhân gây ra lỗi SQL Injection
a) Không kiểm tra dữ liệu đầu vào
Đây là dạng lỗi SQL Injection xảy ra khi thiếu đoạn mã kiểm tra dữ
liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực
hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng.
Câu lệnh sau sẽ minh họa lỗi này:
statement = "SELECT * FROM users WHERE user_name = '" + userName + "';"
Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể
từ bảng những người dùng. Tuy nhiên, nếu biến userName được nhập theo
một cách có chủ ý, nó có thể trở thành một câu truy vấn SQL với mục đích
khác hẳn so với mục đích của đoạn mã trên.
Ví dụ, ta nhập vào giá trị của biến userName như sau :
' or '1'='1
Khiến câu truy vấn có thể được hiểu thành :
SELECT * FROM users WHERE name = '' or '1'='1';
Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì sẽ bắt
buộc phải lựa chọn một tên người dùng hợp lệ bởi điều kiện '1'='1' luôn đúng.
b) Xử lý không đúng kiểu
Lỗi SQL injection dạng này thường xảy ra do lập trình viên định nghĩa
đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu
SVTH: Vĩnh Thái Cường - 49THM
Page 14
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy
vấn SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác
minh kiểu của dữ liệu mà người dùng nhập vào có phải là số hay không. Ví
dụ như sau :
statement = "SELECT * FROM data WHERE id = " + id_ + ";"
Ta có thể nhận thấy một cách rõ ràng mục đích của đoạn mã trên là
nhập vào một số tương ứng với trường id (kiểu số). Tuy nhiên, người dùng
cuối, thay vì nhập vào một số, họ lại nhập vào một chuỗi ký tự, và do vậy có
thể trở thành một câu truy vấn SQL hoàn chỉnh mới mà bỏ qua ký tự thoát. Ví
dụ, ta nhập vào giá trị của biến id_ là :
1;DROP TABLE users
Câu truy vấn sẽ trở thành :
SELECT * FROM DATA WHERE id=1;DROP TABLE users
Khi đó, nó sẽ thực hiện thao tác xóa toàn bộ bảng users ra khỏi cơ sở
dữ liệu.
c) Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu
Đôi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ
liệu, như là trường hợp hàm mysql_real_escape_string()của các máy
chủ MySQL. Điều này sẽ cho phép kẻ tấn công có thể thực hiện một cuộc tấn
công SQL injection thành công dựa trên những ký tự Unicode không thông
thường ngay cả khi dữ liệu đầu vào đã được kiểm soát.
SVTH: Vĩnh Thái Cường - 49THM
Page 15
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
1.2.3 Tác hại từ các cuộc tấn công SQL Injection
Bằng cách chèn các mã SQL query/command vào input trước khi
chuyển cho ứng dụng web xử lí, kẻ tấn công có thể login mà không cần
username và password, remote execution, dump data và lấy root của SQL
server. Cho phép 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.
Tác hại từ các cuộc tấn công SQL Injection còn tùy thuộc vào môi
trường và cách cấu hình hệ thống. Trong SQL Server, nếu ứng dụng sử dụng
quyền dbo (quyền của người sở hữu CSDL - owner) 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 (quyền quản trị hệ thống), nó có thể điều khiển toàn
bộ hệ quản trị CSDL 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 của bạn.
1.3
Tổng kết chương
Dựa vào các thống kê trên có thể rút ra vài nhận xét về lỗi SQL Injection :
- Là một trong số những lỗi bảo mật phổ biến nhất.
- Xác suất gặp phải lỗ hổng bảo mật loại này trong một website là khá cao.
- Được sử dụng nhiều, lý do một phần bởi tính đơn giản, không đòi hỏi
nhiều công cụ hỗ trợ.
- Thời gian khắc phục các điểm yếu này thường khá lâu, do đó hậu quả
thường nặng nề hơn.
Trên thực tế, các cuộc tấn công SQL Injection thường nhắm đến các cơ
sở dữ liệu mang tính thương mại, ví dụ các website thương mại điện tử.
Thông thường, các cuộc tấn công này sẽ tiến hành sửa đổi nội dung của
SVTH: Vĩnh Thái Cường - 49THM
Page 16
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
database đối tượng và chèn các đoạn mã JavaScript độc. Bản chất lỗ hỏng
SQL Injection là xuất hiện từ trong quá trình xử lý dữ liệu đầu vào của người
dùng bên trong mã nguồn, do chính thời gian bảo trì mã nguồn thường kéo
dài nên các lỗi SQL Injection cũng chậm được khắc phục triệt để.
Với tính nghiêm trọng của các cuộc tấn công, tính dễ thực hiện của một
cuộc tấn công đã khiến cho SQL Injection một thời từng là hiểm họa nghiêm
trọng đối với các giao dịch thương mại điện tử trên các ứng dụng Web được
phát triển thiếu an toàn. Hiện nay, việc nghiên cứu SQL Injection đã có hệ
thống và toàn diện hơn, mối nguy hiểm này đã giảm đi, nhưng số liệu thống
kê vẫn cho thấy vấn đề này còn chưa được giải quyết triệt để.
Ở nước ta, trong quá trình đào tạo, các lập trình viên ứng dụng Web
được đào tạo nhiều kiến thức và kỹ năng cần thiết, tuy nhiên các kiến thức về
bảo mật hầu như không được chú trọng đúng mức. Điều này vô hình chung
dẫn đến hệ quả là các sản phẩm của họ đều có nguy cơ mắc phải những vấn
đề về bảo mật, điều mà không đáng có nếu họ được trang bị tốt hiểu biết từ
đầu.
SVTH: Vĩnh Thái Cường - 49THM
Page 17
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
CHƯƠNG 2
CÁC HÌNH THỨC TẤN CÔNG SQL INJECTION PHỔ BIẾN
2.1
Các hình thức tấn công SQL Injection phổ biến
2.1.1
Vượt qua kiểm tra lúc đăng nhập (Bypass Login)
Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đă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. Thông thường để cho phép người dùng truy cập vào các
website được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu
người dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng
nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ
hay không để quyết định cho phép hay từ chối thực hiện tiếp. Ví dụ, trong
trường hợp sử dụng PHP, người ta có thể dùng 2 trang : 1 trang để hiển thị
form nhập liệu và 1 trang khác để xử lý thông tin nhập vào từ phía người
dùng như sau :
- Trang nhập dữ liệu : login.php :
SVTH: Vĩnh Thái Cường - 49THM
Page 18
Đồ án tốt nghiệp đại học
GVHD: Th.S Ngô Văn Công
- Trang xử lý : authentication.php
$user_name = $_POST["user_name"];
$password = $_POST["password"];
$command = "select * from user where user_name='".$user_name."'
and password='".$password."'";
$result = mysql_query($command,$connect);
$row = mysql_fetch_array($result);
if ($row >0)
{ header("Location:controlpanel.php");}
else
{ header("Location:login.php");}
Điểm 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 sau vào trong cả 2 ô nhập liệu
user_name/password của trang login.htm là :
'OR'1'='1
Lúc này, câu truy vấn sẽ được gọi thực hiện là :
SELECT * FROM USER WHERE USER_NAME =''OR'1'='1' AND
PASSWORD= ''OR'1'='1'
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 bảng
USER 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ệ.
SVTH: Vĩnh Thái Cường - 49THM
Page 19
Đồ án tốt nghiệp đại học
2.1.2
GVHD: Th.S Ngô Văn Công
Dạng tấn công thu thập thông tin dựa trên các phản hồi từ
database.
Thông thường, các database đều có tính năng thông báo lỗi xảy ra
trong quá trình truy vấn dữ liệu. Mục đích của tính năng này là giúp người
quản trị có thể dễ dàng nhận biết và sửa lỗi dễ dàng hơn. Tuy nhiên, nó lại là
một điểm yếu bị lợi dụng trong các cuộc tấn công SQL Injection.
Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng
sử dụng các câu lệnh SQL thông thường, biết cách lợi dụng 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.
a) Tìm điểm yếu của website
Xét một liên kết bình thường sau :
http://www.xyz.com.vn/?a=news&id=46
Hình 2-1. Trạng thái bình thường của website
Tuy nhiên, khi thay đổi liên kết trên bằng cách thêm ký tự ’ vào liên kết :
http://www.xyz.com.vn/?a=news&id=46’
SVTH: Vĩnh Thái Cường - 49THM
Page 20
- Xem thêm -