TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN 1 CHỈ
Nghiên cứu và phát triển thử nghiệm kỹ thuật phát
hiện SQL injection
Sinh viên : Nguyễn Trung Kiên
Lớp : 09DHBM3
Mã số sinh viên :2033181116
Sinh viên : Trương Hữu Phúc
Lớp : 09DHBM3
Mã số sinh viên :2033181058
GIÁO VIÊN HƯỚNG DẪN
Trần Đắc Tốt
LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn chân thành tới quý thầy cô của khoa Công Nghệ Thông Tin
trường Đại Học Công Nghiệp Thực Phẩm Thành phố Hồ Chí Minh vì đã hướng dẫn và
chỉ bảo, truyền đạt những kiến thức kinh nghiệm cho chúng em
Đặc biệt chúng em xin gửi lời cảm ơn sâu sắc đến thầy Trần Đắc Tốt , là giáo viên hướng
dẫn trực tiếp ,đã tạo cơ hội cho chúng em phát triển ý tưởng của mình đến mức cao nhất,
và dẫn dắt chúng em hoàn thành đồ án một cách tốt nhất.
Chúng em đã rất nỗ lực cho đồ án này nhưng cũng khơng thể tránh khỏi sai sót.Mong có
sự thơng cảm và ý kiến của thầy cô để cho đồ án này được hồn thiện hơn.
Sau cùng, em xin kính chúc q thầy cô giáo sức khoẻ, luôn thành công trong công việc
và đời sống
Chúng em xin chân thành cảm ơn
TÓM TẮT
Những năm trước đây website thường xuất hiện dưới dạng tĩnh, cho phép người
dùng vào và xem nội dung, khơng có tương tác nhiều với website, nhưng hiện nay ứng
dụng web đang ngày càng phát triển, người lập trình viên thường phát triển với những
website động có thể tương tác với dữ liệu, nhằm tối đa hoá việc giao tiếp với người
dùng.Bên cạnh đó việc sử dụng các website động cũng dễ dẫn đến nguy cơ bị tấn công
đến cơ sở dữ liệu ,lấy cắp thông tin của khách hàng, chiếm quyền điều khiển của trang
web.Theo OWASP (Open Web Application Security Project) , mười lỗ hổng bảo mật ứng
dụng web nguy hiểm nhất , SQL injection đứng hàng A1 là mối đe doạ số một đối với
các ứng dụng web.
Đồ án này chúng em sẽ thực hiện giải quyết việc phát hiện việc trang web bị tấn
công SQL injection bằng cách sử dụng những signature đặc biệt để kiểm tra đầu vào và
việc phát hiện website có lỗ hổng sql injection bằng cách thay vì thực hiện thủ cơng việc
kiểm định SQL injection thì sẽ được cho tự động thực hiện và trả ra kết quả
Đồ án sẽ được trình bày theo bố cục sau:
Chương 1: Tổng Quan về SQL-injection. Chương này sẽ tổng quan về tấn công
SQL-injection, các thức tấn công và phân loại SQL-injection.
Chương 2: Khai Thác SQL-injection.Chương này đi vào vấn đề khai thác lỗ hổng ,
các phương thức tấn công và phân loại SQL-injection, Sử dụng một số tính năng nâng
cao của các DBMS để tấn cơng SQL-injection .
Chương 3:Phịng Chống SQL-injection.Chương này sẽ nghiên cứu cách phòng
chống và giảm thiểu tác động của SQL-injection đối với ứng dụng web, bằng cách sử
dụng IDS hoặc một số phương pháp tránh SQL-injection
MỤC LỤC
LỜI CẢM ƠN ...................................................................................................................... 2
TÓM TẮT............................................................................................................................ 3
Web application firewall ................................................................................................. 7
PHP Data Object .............................................................................................................. 7
Cơ sở dữ liệu.................................................................................................................... 7
MỤC LỤC BẢNG ............................................................................................................... 8
MỤC LỤC HÌNH ................................................................................................................ 9
CHƯƠNG I: TỔNG QUAN VỀ SQL-INJECTION ......................................................... 10
1.1
TỔNG QUAN VỀ ỨNG DỤNG WEB ............................................................... 10
1.2
TỔNG QUAN VỀ SQL-INJECTION ................................................................. 10
1.2.1
KHÁI NIỆM .................................................................................................. 10
1.2.2
NGUYÊN NHÂN ......................................................................................... 10
1.2.3 HẬU QUẢ ........................................................................................................ 11
CHƯƠNG II: KHAI THÁC SQL-INJECTION ................................................................ 11
2.1 CÁC KIỂU TẤN CÔNG SQL-INJECTION .......................................................... 11
2.2 Những parameter thường bị tiêm sqli ...................................................................... 13
2.3 SƠ LƯỢC MỘT SỐ LỆNH TRONG SQL THƯỜNG BỊ SỬ DỤNG ĐỂ TẤN
CÔNG SQL ................................................................................................................... 15
2.3.1 Cú pháp câu lệnh SQL ...................................................................................... 15
2.3.2 Toán tử DISTINCT và ALL ............................................................................. 15
2.3.3 Cách hoạt động của comment........................................................................... 15
2.4 TỔNG QUAN VỀ MƠ HÌNH KẾT NỐI GIỮA DATABASE VÀ WEB
APPLICATION TRÊN MYSQL SERVER .................................................................. 16
2.5 QUY TRÌNH TẤN CƠNG SQL INJECTION ........................................................ 17
2.6 TÌM HIỂU CÁC DATABASE CỦA MỘT SỐ DBMS .......................................... 19
2.6.1 Microsoft SQL Server: ..................................................................................... 19
2.6.2 MySQL ............................................................................................................. 21
2.6.3 PostgreSQL ....................................................................................................... 22
2.6.4 Oracle Database ................................................................................................ 23
2.6.5 SQLite ............................................................................................................... 25
2.7 MỘT SỐ TÍNH NĂNG NÂNG CAO CỦA MYSQL VÀ MSSQL ....................... 25
2.7.1 Microsoft SQL Server: ..................................................................................... 25
2.7.2 MySQL server .................................................................................................. 28
2.7.3 PostgreSQL ....................................................................................................... 30
2.8 BYPASS WAF TRONG SQL INJECTION ........................................................... 32
2.8.1 Cách hoạt động của waf ................................................................................... 32
2.8.2 Một số phương pháp kiểm tra web server có có sử dụng WAF ....................... 32
2.8.3 Một số phương pháp bypass ............................................................................. 33
2.8 PHẦN MỀM PHÁT HIỆN LỖ HỔNG SQL-INJECTION .................................... 35
2.8.1 Giới thiệu về phần mềm phát hiện lỗ hổng SQLI ............................................ 35
2.8.2 Giao diện phần mềm ......................................................................................... 35
2.8.3 Ngôn ngữ lập trình và một số thư viện phát triển............................................. 36
2.8.4 Môi trường phát triển phần mềm ...................................................................... 37
2.8.5 Phương thức hoạt động ..................................................................................... 37
2.8.6 Chức năng của các module ............................................................................... 38
2.8.7 Cài đặt và Thử nghiệm ..................................................................................... 41
CHƯƠNG III: PHÒNG CHỐNG SQL-INJECTION ....................................................... 44
3.1 NHỮNG CÁCH TRÁNH SQL-INJECTION ......................................................... 44
3.1.1 Sử dụng các truy vấn được tham số hoá [15] ................................................... 44
3.1.2 Sử dụng các thủ tục được lưu trữ ..................................................................... 45
3.1.3 Xác thực đầu vào .............................................................................................. 47
3.1.4 Escaping ALL user-supplied Input ................................................................... 47
3.1.5 Hex-encoding đầu vào ...................................................................................... 48
3.1.6 Sử dụng waf ...................................................................................................... 48
3.1.7 Hash password .................................................................................................. 50
3.1.8 WAF Có Thực Sự Tốt ? ................................................................................... 51
3.1.9 Làm cách nào khắc phục tạm thời trước khi giải quyết triệt để SQL injection 51
3.2 NIDS(SNORT) CHO VIỆC PHÁT HIỆN TẤN CÔNG SQL-INJECTION .......... 52
3.2.1 Tổng quan về IDS ............................................................................................. 52
3.2.2 Công cụ Snort ................................................................................................... 52
3.2.3 Kiến trúc của snort (13) .................................................................................... 52
3.2.4 Sử dụng snort để phát hiện sql injection .......................................................... 58
DANH MỤC TÀI LIỆU THAM KHẢO .......................................................................... 67
DANH MỤC CÁC TỪ VIẾT TẮT
TỪ VIẾT TẮT
DBMS
SQL
WAF
PDO
CSDL
TỪ ĐẦY ĐỦ
Database Management System
Structured Query Language
Web application firewall
PHP Data Object
Cơ sở dữ liệu
NGHĨA
Hệ quản trị cơ sở dữ liệu
Ngôn ngữ truy vấn có cấu trúc
Tường lửa ứng dụng web
Lớp truy xuất dữ liệu của php
Nơi tập hợp cơ sở dữ liệu
MỤC LỤC BẢNG
Bảng 1: Bảng Cú Pháp Những Câu Lệnh Thường Bị Lạm Dụng ..................................... 15
Bảng 2: Bảng Cú Pháp Comment ...................................................................................... 16
Bảng 3: Bảng sys.databases trong MSSQL ....................................................................... 19
Bảng 4: Bảng sys.syslogins trong MSSQL ....................................................................... 20
Bảng 5: Bảng information_schema trong MSSQL ........................................................... 21
Bảng 6: Bảng TABLES trong MySQL ............................................................................. 21
Bảng 7: Bảng COLUMNS trong MySQL ......................................................................... 22
Bảng 8: Bảng COLUMN_PRIVILEGES trong MySQL .................................................. 22
Bảng 9: Bảng USER_PRIVILEGES ................................................................................. 22
Bảng 10: Bảng pg_user trong PosstgreSQL ...................................................................... 23
Bảng 11: Bảng pg_database trong PostgreSQL ................................................................ 23
Bảng 12: Bảng V$VERSION trong Oracle ....................................................................... 23
Bảng 13: Bảng GLOBAL_NAME trong Oracle ............................................................... 24
Bảng 14: Bảng V$DATABASE trong Oracle ................................................................... 24
Bảng 15: Bảng ALL_TABLES trong Oracle .................................................................... 24
Bảng 16: Bảng ALL_TAB_COLUMNS trong Oracle ...................................................... 24
Bảng 17: Bảng SQLITE_MASTER của SQLITE ............................................................. 25
Bảng 18: Bảng Cú Pháp ByPass WAF thường gặp........................................................... 34
MỤC LỤC HÌNH
Hình 1 :Các kiểu tấn cơng SQL- injection ....................................................................... 11
Hình 2: Hình Thức Tấn Cơng SQL-Injection Thơng thường ........................................... 13
Hình 3: Mơ Hình Kết Nối Dữ liệu .................................................................................... 16
Hình 4: Quy Trình Tấn Cơng SQL-injection ................................................................... 18
Hình 5: Mơ Hình WAF ..................................................................................................... 32
Hình 6: Sơ Đồ Chức Năng Phần Mềm Phát Hiện Lỗ Hổng ............................................. 38
Hình 7: Mơ Hình WAF Part 2 .......................................................................................... 50
Hình 8: HTTP parameter .................................................................................................. 51
Hình 9: Snort’s Packet-Sniffing ....................................................................................... 53
Hình 10: Snort’s Preprocessor .......................................................................................... 54
Hình 11: Snort’s Detect-engine ........................................................................................ 57
Hình 12: Snort’s Alert Log ............................................................................................... 58
CHƯƠNG I: TỔNG QUAN VỀ SQL-INJECTION
1.1 TỔNG QUAN VỀ ỨNG DỤNG WEB
Ngày này , các ứng dụng web đang trở nên khơng thể thiếu , nó hiện hữu trong mọi
mặt của cuộc sống , từ nông nghiệp đến mua sắm, giải trí, tin tức ,... .Và một điều nữa là
cách ứng dụng web này khơng cịn giống như những năm trước đây sử dụng kiểu web
tĩnh mà sử dụng loại website động để tương tác với người dùng.
Để làm được điều đó những website này phải có một cơ sở dữ liệu đáp ứng và cung
cấp những thông tin cụ thể mà ở phía người dùng u cầu.Để website có thể tương tác
với cơ sở dữ liệu thì cần có một hệ quản trị cơ sở dữ liệu nào đó để quản lý và để cho
website truy xuất dữ liệu
1.1.1 SQL là gì ? truy vấn động SQL là gì ?
SQL ( Structured Query Language) là ngôn ngữ truy vấn có cấu trúc và được sử dụng để
quản lý và truy vấn thông tin từ cơ sở dữ liệu nhanh, giúp bảo trì thơng tin dễ dàng.
Truy vấn động SQL là những câu query được tạo tại thời điểm chạy.
Ví dụ : người dùng sẽ nhập một tham số tìm kiếm và truy vấn sẽ chạy với giá trị đó. Truy
vấn SQL rất hữu ích trong việc tìm kiếm các mục mà khơng biết rõ tên hoặc giá trị cần
tìm kiếm.Thơng thường phần lớn các trang web đều có mục tìm kiếm hoặc filter , từ đó
việc tác động giữa người dùng và cơ sở dữ liệu trở nên gần hơn.
1.2 TỔNG QUAN VỀ SQL-INJECTION
1.2.1 KHÁI NIỆM
SQL injection là một lỗ hổng trong ứng dụng web nằm bảng A1:Injection của top
10 OWASP, lỗ hổng có khả năng cho phép tấn công khai thác bằng việc sử dụng các truy
vấn SQL để ‘tiêm’ thông qua các dữ liệu đầu vào các ứng dụng của web từ máy
khách.Nếu khai thác thành công đọc được những dữ liệu nhạy cảm , thực hiện những
thao tác thay đổi thông tin database.
1.2.2 NGUYÊN NHÂN
Hầu hết các dữ liệu đầu có thể là kí tự đặc biệt có thực hiện sự thay đổi dữ liệu ở
phía server, một biến môi trường hoặc tham số của dịch vụ hay một chức năng nào đó
trong hệ điều hành do từ phía người dùng nhập vào,hiển nhiên nguyên nhân này là do sự
bất cẩn của người lập trình viên, khơng có thực hiện lọc dữ liệu và ràng buộc kỹ càng các
dữ liệu đầu vào cho các input đầu của ứng dụng.
Khơng giới hạn quyền kiểm sốt database của user trong Database Management System DBMS và đa số thường dùng user mặc định có tồn quyền kiểm sốt database
1.2.3 HẬU QUẢ
- Tấn công SQL injection cho phép kẻ tấn cơng giả mạo danh tính, xáo trộn dữ liệu
hiện có hoặc nghiêm trọng hơn là xố hết tất cả dữ liệu của ứng dụng.
- SQL injection thường dẫn đến việc deface trang web một cách dễ dàng , gây ảnh
hưởng tới uy tín của cơng ty hoặc tổ chức
- Có thế tiết lộ dữ liệu bên trong khơng được cho phép
- SQL injection có mức độ tác động nghiêm trọng
- Kẻ tấn cơng có thể đi xa hơn khơng chỉ dừng lại ở viêc thay đổi database mà còn
thể đọc file system, thực hiện chạy các lệnh hệ điều hành,tạo một webshell
- Có thể thực hiện Remote Desktop Protocol (RDP) từ xa
- Dẫn đến hậu quả ở mức cao nhất là Remote Code Execution(RCE)
- Tổ chức OWASP thống kê rủi ro 10 lỗ hổng an ninh và trong đó trong nhiều năm
SQL injection nằm trong top
CHƯƠNG II: KHAI THÁC SQL-INJECTION
2.1 CÁC KIỂU TẤN CƠNG SQL-INJECTION
Hình 1 :Các kiểu tấn cơng SQL- injection
SQL Injection chia thành 3 loại chính:
In-band SQLi : Đây là dạng tấn công đơn giản và phổ biến nhất để khai thác lỗ hổng
SQL injection.
Dạng này được chia ra thành 2 dạng nhỏ là Error-based và Union-based
Với dạng Error-based :Việc tấn công sẽ dựa vào những thông báo lỗi được trả về khi
người dùng cố tình truy vấn sai ,dựa vào thơng báo lỗi, đơi khi kẻ tấn cơng có thể biết
được thuộc tính của database thơng qua lỗi được xuất trên màn hình
Với dạng Union-based:
Là một kỹ thuật sử dụng tính năng của tốn tử UNION trong ngơn ngữ SQL cho phép kết
hợp truy vấn 2 hoặc nhiều câu truy vấn SQL và trả về kết quả của những truy vấn đó
trong cùng 1 kết quả
Blind SQLi:
Đây là kiểu tấn công SQL injection sử dụng những mệnh đề để đốn có nghĩa là dạng tấn
công này sẽ không hiện ra lỗi ,việc tấn cơng phải lần mị từng bước để thực hiện,
Có 2 dạng là :
Blind-boolean-base:
Kỹ thuật này dựa vào việc gửi các truy vấn tới cơ sở dữ liệu và buộc trả về các kết quả
khác nhau phụ thuộc vào câu truy vấn là true hay false,cơ bản là việc so sánh đúng hoặc
sai để tìm ra từng ký tự của những thông tin như tên database, tên bảng ,....Do những ký
tự được trải dài với giá trị bao gồm, chữ thường chữ hoa, số và một số ký tự đặc biệt nên
việc khai thác Blind-boolean-base bằng tay sẽ mất nhiều thời gian.
Blind-Time-base:
Kỹ thuật này cũng giống như boolean nhưng chỉ khác nhau về cách suy diễn, kỹ thuật
này dựa vào thời gian mà ứng dụng xử lý kết quả và trả về .Từ đó có thể xác định câu
truy vấn cho ra kết quả true hoặc là false
Hình 2: Hình Thức Tấn Cơng SQL-Injection Thơng thường
Out-of-band SQL injection
Đây là dạng khai thác lọc dữ liệu từ cơ sở dữ liệu thông qua các kênh gửi đi như là giao
thức DNS, HTTP. Sử dụng một số dịch vụ đang chạy trên server để trích xuất dữ liệu từ
máy chủ.Việc lợi dụng một số dịch vụ trên server thì phụ thuộc vào các công nghệ sử
dụng ở backend.
Nguyên nhân
- Thiếu xác thực đầu vào trên web
- Môi trường mạng để cho phép máy chủ cơ sở dữ liệu
- Có đủ quyền để gửi requests
Kết quả của việc tấn công có thể bắt được bởi proxy hoặc là máy chủ lắng nghe
2.2 Những parameter thường bị tiêm sqli
Một số parameter thường gặp:
Id,cat,page,view,data,typeboard,prodID,uid,product_id,pr,tid,fid,userID, EventID,
idCategory, section,
HTTP HEADER
Form (HTTP POST)
Một cách dễ hiểu hơn là chúng ta sẽ chèn truy vấn vào nội dung của gói tin, ví dụ hình
sau:
Một trang web có thể có rất nhiều form bao gồm thấy được và không thấy được và chúng
ta sẽ chèn những truy vấn vào những ô này.
một vài thông tin: giao thức HTTP khi gởi dữ liệu từ phía client lên server sẽ dùng
phương thức POST. Vì vậy trước khi tấn công loại này, chúng ta cần biết một trang web
sẽ gởi đi những gì sau khi chúng ta nhấn nút “Đăng nhập”. Chúng ta vẫn sẽ dùng Live
HTTP headers,Burpsuite để bắt request và response phân tích
2.3 SƠ LƯỢC MỘT SỐ LỆNH TRONG SQL THƯỜNG BỊ SỬ
DỤNG ĐỂ TẤN CÔNG SQL
2.3.1 Cú pháp câu lệnh SQL
Truy cấn dữ liệu từ các bảng
SELECT <columns list> FROM <table> ;
Union kết hợp kết quả của hai câu truy vấn
<SELECT statement> UNION <other SELECT statement>;
Truy vấn sử dụng toán tử DISTINCT
SELECT DISTINCT <field list> <remainder of the statement>;
Truy cấn dữ liệu từ các bảng có where và order by
SELECT <columns list> FROM <table> WHERE <condition> ORDER BY
<name column,number column> ASC|DESC;
Union kết hợp kết quả của hai câu truy vấn có sử dụng toán tử ALL
<SELECT statement> UNION ALL <other SELECT statement>;
Bảng 1: Bảng Cú Pháp Những Câu Lệnh Thường Bị Lạm Dụng
2.3.2 Toán tử DISTINCT và ALL
- DISTINCT là lọc ra các dòng giá trị trùng lặp trong table
- Nếu sử dụng UNION sẽ cho ra kết quả có lọc giá trị như DISTINCT, nếu muốn
xuất ra toàn bộ kết quả kể cả trùng lặp thì sử dụng lệnh UNION ALL
<SELECT statement> UNION ALL <other SELECT statement>;
2.3.3 Cách hoạt động của comment
Syntax
Example
#
Hash
SELECT * FROM Employers where username = '' OR
2=2 #' AND password ='';
/*
C-Style
SELECT * FROM Employers where username = '' OR
2=2 /*' AND password ='*/'';
-- SQL
;%00
NULL
byte
SELECT * FROM Employers where username = '' OR
2=2 -- -' AND password ='';
SELECT * FROM Employers where username = '' OR
2=2; [NULL]' AND password ='';
Bảng 2: Bảng Cú Pháp Comment
2.4 TỔNG QUAN VỀ MƠ HÌNH KẾT NỐI GIỮA DATABASE VÀ
WEB APPLICATION TRÊN MYSQL SERVER
Hình 3: Mơ Hình Kết Nối Dữ liệu
Mơ hình được lấy từ [1]
-
Application: Ứng dụng là một loại phần mềm có thể được cài đặt và chạy trên
máy tính, máy tính bảng, điện thoại thơng minh hoặc các thiết bị điện tử khác
- Driver Manager: Trình quản lý điều khiển , là thư viện quản lý thông tin quản lý
giữa ứng dụng và ODBC
- DSN configuration: Đây là tên mà các ứng dụng sử dụng để yêu cầu kết nối với
Nguồn dữ liệu ODBC. Nói cách khác, nó là một tên tượng trưng đại diện cho kết
nối ODBC. Nó lưu trữ các chi tiết kết nối như tên cơ sở dữ liệu, thư mục, trình
điều khiển cơ sở dữ liệu, UserID, mật khẩu, v.v. khi thực hiện kết nối với ODBC.
-
Connector/ODBC:(Open Database Connectivity):cung cấp một phương pháp API
cho việc sử dụng các hệ quản trị cơ sở dữ liệu,mục đích của ODBC là cung cấp
cho các trình ứng dụng khả năng truy xuất dữ liệu bất kì mà khơng phải quan tâm
đến việc hiện tại dữ liệu đang được quản lí bởi hệ quản trị cơ sở dữ liệu nào.
ODBC làm được việc này bằng cách chèn một lớp trung gian vào giữa trình ứng
dụng và hệ quản trị cơ sở dữ liệu.Mục đích của lớp trung gian này là chuyển đổi
những câu truy vấn của trình ứng dụng thành những lệnh mà hệ quản trị cơ sở dữ
liệu hiểu.Ứng dụng có thể tạo ra lệnh ODBC và hệ quản trị cơ sở dữ liệu khả năng
đáp lại những lệnh đó
-
DBMS:Nơi tập hợp các dữ liệu có tổ chức , thường được lưu trữ và truy cập điện
tử từ hệ thống máy tính.Khi cơ sở dữ liệu phức tạp hơn, chúng thường được phát
triển bằng cách sử dụng các kỹ thuật thiết kế và mơ hình hố chính thức.
2.5 QUY TRÌNH TẤN CƠNG SQL INJECTION
Quy trình để tấn công SQL-Injection nếu ra các bước mà một cuộc tấn công SQL
injection được bắt đầu và kết thúc [3]
Hình 4: Quy Trình Tấn Cơng SQL-injection
Bước 1: Kẻ tấn cơng dị qt lỗ hổng trên ứng dụng web của nạn nhân, gửi những đoạn
mã độc hại tới CSDL thông qua ứng dụng web
Bước 2: Máy chủ web (web server) tiếp nhận câu truy vấn và gửi nó đến máy chủ ứng
dụng
Bước 3: Câu truy vấn độc hại tiếp tục được chuyển từ máy chủ ứng dụng đến DBMS (
giả định web bị dính lỗ hổng SQL-Injection) .
Bước 4 : Tại máy chủ cơ sở dữ liệu, câu truy vấn độc hại sẽ được thực thi .Yêu cầu không
hợp lệ hoặc thông tin nhạy cảm của người dùng sẽ được trả về và hiển thị trên ứng dụng
web
Bước 5:Kẻ tấn công nhận được thông tin trả về và bắt đầu thực thi một câu truy vấn độc
hại khác
2.6 TÌM HIỂU CÁC DATABASE CỦA MỘT SỐ DBMS
Trong phần này, sẽ tìm hiểu về những databse quan trọng dễ bị lợi dụng để tấn
công SQL-injection của một số DBMS
2.6.1 Microsoft SQL Server:
Microsoft SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi
Microsoft và thường được sử dụng phổ biến trên hệ điều hành windows và có lẽ chúng ta
thường thấy một sự kết hợp của ASP và MSSQL tạo nên các trang web
Database master là một database đầu tiên xuất hiện khi SQL Server được khởi
động và chứa các cấu trúc cũng như các cấu hình , thơng tin phiên bản hiện đang sử dụng
,một số database khác cũng chính vì vậy database này có một thơng tin cần thiết để mở
các database khác.Ngồi ra databse master cịn là cơ sở dữ liệu ghi lại sự tồn tại của tất cả
các database khác và vị trí chứa các file dữ liệu của các cơ sở dữ liệu khác và file log khi
các thơng tin khởi tạo cho SQL Server.Do đó SQL Server không bao giờ khởi động được
nếu thiếu database master,database master cịn có file dữ liệu (master.mdf) và file log
(mastlog.ldf).
Table sys.databases thuộc database master cho phép truy xuất một số thông tin
của mỗi database.Một số column thường được sử dụng của table sys.databases:
Tên cột
Mô tả
name
Tên của database trong cơ sở dữ liệu
database_id
ID của mỗi database
Các quyền truy cập của user
user_access
0: đa người dùng
1: một người dùng
2: hạn chế người
Bảng 3: Bảng sys.databases trong MSSQL
Table sys.syslogins thuộc database master cho phép truy xuất thông tin tài
khoản người dùng login. Một số column thường được sử dụng của table
sys.syslogins:
Tên cột
Mô tả
name
Tên tài khoản đăng nhập
dbname
Tên database mà tài khoản user được truy cập
password
Mật khẩu tài khoản nhưng sẽ trả về null
hasaccess
1: được cập quyền truy cập server
sysadmin 1:tài khoản đăng nhập quyền sysadmin của server
Bảng 4: Bảng sys.syslogins trong MSSQL
Table sys.sysusers thuộc database master cho phép truy xuất tên và trạng
của user. Một số column thường được sử dụng của table sys.sysusers
Tên cột
Mô tả
name
Tên người dùng hoặc tên group
Table sys.sysuser trong MSSQL
Information_schema là một metadata được SQL Server cung cấp để lấy dữ liệu
thông tin của hệ quản trị cơ sở dữ liệu hay còn được gọi là table view.Một số table
thường được sử dụng trong information_schema như:Columns,Tables
TABLES
Tên cột
Mô tả
TABLE_SCHEMA
Tên database chứa các bảng
TABLE_NAME
Tên bảng
COLUMNS
Tên cột
TABLE_SCHEMA
TABLE_NAME
Mơ tả
Tên database chứa các bảng,ngồi ra cịn
có thể truy vấn đến table sys.object thuộc
database master để xem
Tên bảng
COLUMN_NAME
Tên cột
Bảng 5: Bảng information_schema trong MSSQL
2.6.2 MySQL
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và
được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng, chạy trên hầu
hết tất cả các nền tảng, bao gồm cả Linux , UNIX và Windows.MySQL thường được kết
hợp với các ứng dụng web. MySQL hoạt động cùng với một số chương trình tiện ích hỗ
trợ quản trị cơ sở dữ liệu MySQL. Các lệnh được gửi đến MySQLServer thông qua máy
khách MySQL, được cài đặt trên máy tính.Cũng như MSSQL đi với ASP thì MySQL
thường đi chung với ngơn ngữ PHP
INFORMATION_SCHEMA trong MySQL là cơ sở dữ liệu thông tin, tại đây lưu
trữ các thông tin của các cơ sở dữ liệu khác của MySQL. Trong cơ sở dữ liệu
INFORMATION_SCHEMA chứa một vài bảng có thuộc tính chỉ đọc. Chúng thực ra chỉ
là các view, không phải là bảng dữ liệu, vì vậy mà khơng có các file lưu trữ riêng(các
bảng đều có các file chứa dữ liệu của bảng nằm trên ổ đĩa). Cũng chính vì là các view mà
người dùng không thể thiết lập các trigger lên chúng và đồng thời khơng có thư mục dữ
liệu riêng (trong MySQL mỗi cơ sở dữ liệu được nằm ở một thư mục riêng).
Trong database INFORMATION_SCHEMA cung cấp quyền truy cập vào siêu dữ
liệu cơ sở dữ liệu , thông tin về máy chủ MySQL như tên của cơ sở dữ liệu hoặc bảng,
kiểu dữ liệu của cột hoặc đặc quyền truy cập.Một số table thường được sử dụng nhiều
nhất là TABLES, COLUMNS và USER_PRIVILEGES, COLUMN_PRIVILEGES.
Bảng TABLES cung cấp tất cả thông tin về các bảng của cơ sở dữ liệu,cũng như
các tên cơ sở dữ liệu ,các thông trong các cột ở bảng TABLES được lưu trong bộ nhớ
cache .Một số column được sử dụng trong bảng TABLES
Tên cột
Mô tả
TABLE_SCHEMA Tên database chứa các bảng
TABLE_NAME
Tên bảng
TABLE_ROWS
Xác số dòng ở mỗi bảng
Bảng 6: Bảng TABLES trong MySQL
Bảng COLUMNS cung cấp tất cả các thông tin về các cột của các bảng trong tất
cả các cơ sở dữ liệu, Bảng liên quan ST_GEOMETRY_COLUMNS cung cấp thông tin
về các cột trong bảng lưu trữ dữ liệu không gian. Một số column được sử dụng trong
bảng COLUMNS:
Tên cột
Mô tả
TABLE_SCHEMA Tên database chứa các bảng
TABLE_NAME
Tên bảng
COLUMN_NAME
Tên cột
PRIVILEGES
Các quyền mà mỗi cột có được
Bảng 7: Bảng COLUMNS trong MySQL
Bảng COLUMN_PRIVILEGES cung cấp bảng cung cấp thông tin về quyền ưu
đãi cột. Nó lấy các giá trị của nó từ mysql.columns_priv của table của hệ quản trị cơ sở
dữ liệu. Các column được sử dụng trong bảng COLUMN_PRIVILEGES:
Tên cột
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTEE
Mô tả
Tên database chứa các bảng chứa cột
Tên của bảng chứa cột.
Tên cột.
Tên của tài khoản được cấp đặc quyền, ở định dạng 'user_name' @
'host_name'.
Bảng 8: Bảng COLUMN_PRIVILEGES trong MySQL
Bảng USER_PRIVILEGES chứa tất cả các thông tin về quyền truy cập của các
người dùng đối với mỗi cơ sở dữ liệu,lấy các giá trị từ mysql.user. Các column được sử
dụng trong bảng USER_PRIVILEGES:
Tên cột
GRANTEE
Mô tả
Tên của tài khoản mà các quyền được cấp, ở định dạng
'user_name'@'host_name'
PRIVILEGE_TYPE Các loại quyền được cấp
Bảng 9: Bảng USER_PRIVILEGES
2.6.3 PostgreSQL
Đây là là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object-relational
database management system) có mục đích chung, hệ thống cơ sở dữ liệu mã nguồn mở
tiên tiến nhất hiện nay. PostgreSQL được thiết kế để chạy trên các nền tảng tương tự
UNIX. Tuy nhiên, PostgreSQL sau đó cũng được điều chỉnh linh động để có thể chạy
được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows.
Bảng pg_user cung cấp quyền truy cập thông tin về cơ sở dữ liệu người dùng.Một
số columns thường được sử dụng trong bảng pg_user:
Tên cột
usename
usesuper
usecreatedb
usecatupd
Mơ tả
Tên người dùng
Người dùng có đặc quyền cao
Người dùng có thể tạo cơ sở dữ liệu
Người dùng có quyền cập nhật catalog
Bảng 10: Bảng pg_user trong PosstgreSQL
Bảng pg_database cung cấp tên các database đã được tạo trong cơ sở dữ liệu
Tên cột
datname
datdba
encoding
Mô tả
Tên cơ sở dữ liệu
Tên người tạo cơ sở dữ liệu
Mã hóa các ký tự
Nếu giá trị bool đúng, thì cơ sở dữ liệu này có thể được sao chép bởi bất
kỳ người dùng nào có đặc quyền CREATEDB; nếu sai, thì chỉ những
datistemplate người cấp trên hoặc chủ sở hữu cơ sở dữ liệu mới có thể sao chép nó.
Nếu giá trị bool sai thì khơng ai có thể kết nối với cơ sở dữ liệu này. Điều
datallowconn này được sử dụng để bảo vệ cơ sở dữ liệu template0 không bị thay đổi
datconnlimit
Đặt số lượng kết nối đồng thời tối đa có thể được thực hiện với cơ sở dữ
liệu.Đặt với -1 có nghĩa là khơng có giới hạn
Bảng 11: Bảng pg_database trong PostgreSQL
Cũng như MYSQL thì PostgreSQL có INFORMATION_SCHEMA trong
PostgreSQL là cơ sở dữ liệu thơng tin, tại đây lưu trữ các thông tin của các cơ sở dữ liệu
khác của PostgreSQL. Một số table thường được sử dụng nhiều nhất là TABLES,
COLUMNS và USER_PRIVILEGES, COLUMN_PRIVILEGES tương tự như MYSQL.
2.6.4 Oracle Database
Đây là một hệ quản trị cơ sở dữ liệu đa mơ hình do Tập đoàn Oracle sản xuất và
tiếp thị. Đây là cơ sở dữ liệu thường được sử dụng để chạy các khối lượng công việc xử
lý giao dịch trực tuyến, kho dữ liệu và hỗn hợp. Hệ cơ sở dữ liệu Oracle được triển khai
với mục đích tạo ra sự độc quyền khi bổ sung thêm các extension cho SQL chuẩn. Bên
cạnh đó, những cơ sở dữ liệu này có hỗ trợ thêm ngơn ngữ lập trình Java và các chương
trình được viết trên PL/SQL.
Bảng V$VERSION cung câp phiên bản của thư viện trong cơ sỡ dữ liệu
ORACLE
Tên cột
Mô tả
BANNER Tên thư viện và số phiên bản
Bảng 12: Bảng V$VERSION trong Oracle
Bảng Dual là một bảng do Cơ sở dữ liệu Oracle tự động tạo,ở trong cơ sở dữ liệu
của người dùm SYS ta có sử dụng truy vấn để đến cột SYS.DATABASE_NAME từ
DUAL.
Bảng GLOBAL_NAME cung cấp tên các database hiện đang có sẵn.Có 1
cột GLOBAL_NAME
Tên cột
Mô tả
GLOBAL_NAME Tên database
Bảng 13: Bảng GLOBAL_NAME trong Oracle
Bảng V$DATABASE cung cấp thông tin về cơ sở dữ liệu từ file control. Các
column được sử dụng trong bảng V$DATABASE
Tên cột
name
Mô tả
Tên database
MODE
MAXIMUM PROTECTION
MAXIMUM AVAILABILITY
PROTECTION_MODE
RESYNCHRONIZATION
MAXIMUM PERFORMANCE
UNPROTECTED
Bảng 14: Bảng V$DATABASE trong Oracle
Bảng V$INSTANCE cung cấp các trạng thái và phiên bản hiện ,tên máy chủ và
database. Các column được sử dụng trong bảng V$INSTANCE
Tên cột
Mô tả
INSTANCE_NAME
Tên của phiên bản
HOST_NAME
Tên của máy chủ
VERSION
Phiên bản cơ sở dữ liệu
Bảng ALL_TABLES cung cấp cấp các tên table và tên user có quyền sở hữu và
sử dụng. Các column được sử dụng trong bảng ALL_TABLES
Tên cột
Mô tả
OWNER
Tên user sở hữu bảng
TABLE_NAME
Tên bảng
Bảng 15: Bảng ALL_TABLES trong Oracle
Bảng ALL_TAB_COLUMNS cung cấp cấp các tên table,column và tên user có
quyền sở hữu và sử dụng. Các column được sử dụng trong bảng ALL_TAB_COLUMNS
Tên cột
Mô tả
OWNER
Tên user sở hữu bảng
TABLE_NAME
Tên bảng
COLUMN_NAME
Tên cột
Bảng 16: Bảng ALL_TAB_COLUMNS trong Oracle
2.6.5 SQLite
Đây là hệ thống cơ sở dữ liệu quan hệ nhỏ gọn, hồn chỉnh, có thể cài đặt
bên trong các trình ứng dụng khác.
Trong hệ thống hệ quản trị cơ sở dữ liệu SQLITE có 3 table chính:
sqlite_master, sqlite_sequence, sqlite_stat1.Đối với attacker thường sử dụng chính
là bảng sqlite_master.
Bảng sqlite_master liệt kê tổng thể tất cả các đối tượng cơ sở dữ liệu trong
cơ sở dữ liệu và sử dụng SQL để tạo từng đối tượng.
Tên cột
type
name
tbl_name
rootpage
sql
Mô tả
Các loại đối tượng của database như bảng,chỉ mục,trigger
Tên của đối tượng cơ sở dữ liệu
Tên bảng mà đối tượng cơ sở dữ liệu được liên kết
Trang chủ
SQL được sử dụng để tạo đối tượng cơ sở dữ liệu.
Bảng 17: Bảng SQLITE_MASTER của SQLITE
2.7 MỘT SỐ TÍNH NĂNG NÂNG CAO CỦA MYSQL VÀ MSSQL
2.7.1 Microsoft SQL Server:
SQL Server là một DBMS(Database Management System) rất mạnh, cung cấp các
tính năng nâng cao cho người quản trị cơ sở dữ liệu. Hầu hết các tính năng này đều có
quyền thực hiện tương tác dịng lệnh.Những user thuộc DBO thường thì các user khơng
có đủ quyền để thực hiện các lệnh.Thì để có quyền được cao hơn để tương tác thì các kẻ
tấn cơng sẽ thực hiện tấn công lấy user sa(System Administrator).Thường mật khẩu của
user sa sẽ được mã hóa dạng SHA-1,thì hacker có sử dụng một sơ cộng cụ crack như
John the Ripper.
Sẽ có 2 câu truy vấn mà kẻ tấn cơng có thể truy xuất được username và password
của user sa:
SELECT name, password FROM master..sysxlogins
MSSQL Server 2000
SELECT name, password_hash FROM master.sys.sql_logins MSSQL Server >= 2005
Khi có được user sa thì có kiểm sốt hoàn toàn hệ quản trị cơ sở dữ liệu và sử
dụng một số tính năng nâng cao.Hầu hết các kẻ tấn công sẽ sử dụng hàm xp_cmdshell là
một hàm cho phép sử dụng những lệnh tương tác với hệ thống,lưu ý xp_cmdshell chỉ
được sử dụng bởi user sa, và mặc định hàm xp_cmdshell thì khơng được bật,tất nhiên
nếu muốn bật thì chỉ có user sa mới có thể bật tính năng hàm xp_cmdshell.
Hướng dẫn bật tính năng hàm xp_cmdshell: