Nhiệm vụ của đề tài - Nghiên cứu các dạng tấn công SQL Injection và các cách thức mà kẻ tấncông sử dụng để khai thác lỗ hổng SQL Injection của hệ thống.. Được thực hiện bằng cách chèn th
Trang 1TRƯỜNG ĐẠI HỌC KINH TẾ
KHOA THỐNG KÊ – TIN HỌC
–––––––––––––––––––––––––––––––
BÁO CÁO THUYẾT TRÌNH HỌC PHẦN
AN TOÀN VÀ BẢO MẬT HỆ THỐNG THÔNG TIN
ĐỀ TÀI:
TẤN CÔNG SQL INJECTION
Sinh viên thực hiện :
Giảng viên hướng dẫn :
Đà Nẵng, 10/2022
Trang 2MỤC LỤC
MỤC LỤC ii
DANH MỤC HÌNH ẢNH iv
DANH MỤC BẢNG BIỂU v
DANH MỤC CÁC TỪ VIẾT TẮT vi
LỜI MỞ ĐẦU 1
CHƯƠNG 1 TỔNG QUAN VỀ SQL INJECTION 2
1.1 Giới thiệu về SQL Injection 2
1.2 Ưu điểm và nhược điểm của tấn công SQL Injection 3
CHƯƠNG 2 CÁC HƯỚNG TẤN CÔNG SQL INJECTION 4
2.1 Chèn SQL Injection dựa trên đầu vào 4
2.2 Chèn SQL Injection dựa trên cookies 4
2.3 Chèn SQL Injection dựa trên headers HTTP 5
2.4 Chèn SQL Injection bằng bậc hai 6
CHƯƠNG 3 CÁC DẠNG TẤN CÔNG SQL INJECTION 8
3.1 In-band SQL Injection 8
3.1.1 Error-based SQL Injection 8
3.1.2 Union-based SQL Injection 10
3.2 Inferential SQL Injection 11
3.2.1 Blind-boolean-based SQL Injection 11
3.2.2 Blind-time-based SQL Injection 13
3.3 Out-of-band SQL Injection 14
CHƯƠNG 4 kHAI THÁC LỖ HỔNG SQL INJECTION 16
4.1 Tấn công vượt qua đăng nhập 16
Trang 34.2 Tấn công dựa vào câu lệnh SELECT 17
4.3 Tấn công dựa vào câu lệnh INSERT 17
4.4 Tấn công dựa vào Stored-procedures 18
CHƯƠNG 5 KỊCH BẢN VÀ DEMO TẤN CÔNG SQL INJECTION 21
5.1 Vượt qua khâu đăng nhập của hệ thống 21
5.2 Đánh cắp dữ liệu 21
5.3 Chỉnh sửa (Thêm, sửa, xóa) dữ liệu 22
CHƯƠNG 6 CÁCH PHÒNG CHỐNG SQL INJECTION 24
KẾT LUẬN 25
TÀI LIỆU THAM KHẢO 26
PHỤ LỤC 29
Trang 4DANH MỤC HÌNH ẢNH
Hình 2.1.1 Tham số được truyền qua url 4
Hình 2.4.1 Trang đăng ký Haiderm.com 6
Hình 2.4.2 Trang đổi mật khẩu Haiderm.com 7
Hình 3.1.1 Chèn nội dung bất kỳ để thay đổi tham số 9
Hình 3.1.2 Chèn câu lệnh truy vấn vào url 9
Hình 3.2.1 Nhập giá trị boolean 12
Hình 3.2.2 Nhập giá trị boolean’ or 1=1# 12
Hình 3.2.3 Nhập giá trị boolean’ or 1=2# 13
Hình 3.2.4 Nhập giá trị ‘ or 1=1 and sleep(1)# 14
Hình 4.1.1 Đoạn mã trang HTML 16
Hình 4.1.2 Đoạn mã trang ASP 16
Trang 5DANH MỤC BẢNG BIỂU
Trang 6DANH MỤC CÁC TỪ VIẾT TẮT SQLi : SQL Injection
Trang 7LỜI MỞ ĐẦU
1 Mục tiêu nghiên cứu của đề tài
- Đề tài này nghiên cứu SQL Injection trong tấn công các ứng dụng web,phần mềm máy tính và cách thức để chống lại cuộc tấn công SQLInjection
2 Nhiệm vụ của đề tài
- Nghiên cứu các dạng tấn công SQL Injection và các cách thức mà kẻ tấncông sử dụng để khai thác lỗ hổng SQL Injection của hệ thống
- Nghiên cứu cách thức để các hệ thống chống lại các cuộc tấn công SQLInjection
3 Phương pháp nghiên cứu
- Thu thập tài liệu, thông tin từ các trang blog, website, video youtube trênInternet
4 Đối tượng và phạm vi nghiên cứu
- Nghiên cứu về dạng tấn công SQL Injection đối với các ứng dụng web vàphần mềm máy tính
5 Kết cấu của đề tài
Đề tài được tổ chức gồm phần mở đầu, 6 chương nội dung và phần kếtluận
- Mở đầu
- Chương 1: Tổng quan về SQL Injection
- Chương 2: Các hướng tấn công SQL Injection
- Chương 3: Các dạng tấn công SQL Injection
- Chương 4: Khai thác lỗ hổng SQL Injection
- Chương 5: Kịch bản và demo tấn công SQL Injection
- Chương 6: Cách phòng chống SQL Injection
Trang 8- Kết luận
Trang 9
-CHƯƠNG 1 TỔNG QUAN VỀ SQL INJECTION
1.1 Giới thiệu về SQL Injection
SQL Injection (SQLi) là một kỹ thuật lợi dụng những lỗ hổng về câu truyvấn của các ứng dụng Được thực hiện bằng cách chèn thêm một đoạn SQL đểlàm sai lệch đi câu truy vấn ban đầu, từ đó có thể khai thác dữ liệu từ database.SQL Injection có thể cho phép những kẻ tấn công thực hiện các thao tác như mộtngười quản trị web, trên cơ sở dữ liệu của ứng dụng
Ví dụ: Ở trong Form đăng nhập thì người sử dụng nhập dữ liệu ở trongtrường tìm kiếm và người dùng sẽ nhập các văn bản tìm kiếm Khi đó, các biểumẫu lưu dữ liệu và người dùng nhập dữ liệu cần phải lưu chúng lại Toàn bộ các
dữ liệu đã được chỉ định này đều sẽ được đi vào cơ sở dữ liệu
Thay cho việc nhập đúng dữ liệu, kẻ tấn công sẽ lợi dụng lỗ hổng để cóthể Insert rồi thực thi những câu lệnh SQL bất hợp pháp để có thể lấy dữ liệu nàycủa người sử dụng Khi đó, SQL Injection sẽ thực hiện với ngôn ngữ lập trìnhSQL và chúng được dùng với mục đích quản lý dữ liệu đã được lưu trữ trongtoàn bộ các cơ sở dữ liệu [ CITATION Top \l 18441 ]
Cách hoạt động của SQL Injection: Các cuộc tấn công SQL Injection chủyếu được thực hiện tại các ô nhận input của hệ thống, nới chứa các tham số (câulệnh WHERE trong SQL) để làm điều kiện cho hệ thống truy vấn kết quả Khicác ô input này có lỗ hổng, kẻ tấn công chèn vào đây các câu lệnh SQL để đánhlừa hệ thống trả về các kết quả mà họ muốn (thông báo lỗi hay kết quả của câulệnh SQL được chèn vào)
Sự nguy hiểm của SQL Injection:
Hack tài khoản cá nhân
Ăn cắp hoặc sao chép dữ liệu của trang web hoặc hệ thống
Thay đổi dữ liệu nhạy cảm của hệ thống
Xóa dữ liệu nhạy cảm và quan trọng của hệ thống
Người dùng có thể đăng nhập vào ứng dụng với tư cách người dùng khác, ngay cả với tư cách quản trị viên
Trang 10 Người dùng có thể xem thông tin cá nhân thuộc về những người dùng khác, ví dụ chi tiết hồ sơ của người dùng khác, chi tiết giao dịch của họ,…
Người dùng có thể sửa đổi cấu trúc của cơ sở dữ liệu, thậm chí xóa các bảng trong cơ sở dữ liệu ứng dụng
Người dùng có thể kiểm soát máy chủ cơ sở dữ liệu và thực thi lệnh theo ý muốn [ CITATION Top \l 18441 ]
1.2 Ưu điểm và nhược điểm của tấn công SQL Injection
Cách thức tấn công đơn giản, chủ yếu là sử dụng câu lệnh SQL
Lỗ hổng SQL Injection dễ bị phát hiện
Với những hệ thống có lỗ hổng, không an toàn thì cuộc tấn công SQLi
có tỷ lệ thành công tương đối cao (lỗ hổng dễ bị khai thác)
Khi kẻ tấn công đã vượt qua được khâu đăng nhập, đã lấy được dữliệu trong hệ thống thì kẻ tấn công có khả năng chiếm quyền kiểm soáttoàn bộ hệ thống
b) Nhược điểm
Hệ thống phải có lỗ hổng mới tấn công được
SQL Injection là là kỹ thuật tấn công đã xuất hiện trong một thời giandài nên các phần mềm và ứng dụng web hiện tại đã được các lập trìnhviên chú ý và xây dựng các hệ thống chống lại dạng tấn công này
Hoạt động của kẻ tấn công có thể được trình duyệt lưu lại và có thểvẫn hiển thị với nhà cung cấp dịch vụ mạng internet
Trang 11CHƯƠNG 2 CÁC HƯỚNG TẤN CÔNG SQL INJECTION 1.1 Chèn SQL Injection dựa trên đầu vào
Một cuộc tấn công SQL Injection thường phổ biến với việc sử dụng cácđầu vào của người dùng Các ứng dụng web đều chấp nhận các đầu vào thôngqua nhiều hình thức khác nhau Thông qua đó, những kẻ tấn công có thể gắn SQLInjection với các dữ liệu đầu vào và truy cập vào cơ sở dữ liệu máy chủ.[ CITATION PAV21 \l 18441 ]
User input điển hình thường đến từ các form nhập liệu, form search haylink… Những dữ liệu này được web browser gửi đến server thông qua phươngthức HTTP GET hay POST và trở thành các tham số cho ứng dụng web truy cậptới cơ sở dữ liệu
Một trường hợp phổ biến trong kỹ thuật tấn công SQL Injection là khingười dùng request một tài liệu mà các tham số của nó được truyền qua url ( nhưHình 2.1 1, tham số id được truyền qua url theo phương thức HTTP GET) Khinhận được request, ứng dụng web tìm trong cơ sở dữ liệu và trả về cho ngườidùng bài viết có id=31 [ CITATION Kyr22 \l 18441 ]
Hình 2.1.1 Tham số được truyền qua url
1.3 Chèn SQL Injection dựa trên cookies
Một cách tiếp cận khác với SQL Injection là sửa đổi cookie thành các truyvấn cơ sở dữ liệu chứa mã độc Các phần mềm độc hại có thể được triển khai trênthiết bị người dùng thông qua thay đổi của cookie, nhằm mục đích đưa SQLInjection vào các dữ liệu Back-end [ CITATION PAV21 \l 18441 ]
Trang 12Cookies là những tệp tin lưu trữ thông tin trạng thái của người dùng khitruy cập các ứng dụng web Những thông tin này do người lập trình quyết định,được tạo ra ở server và lưu trữ tại client Khi người dùng truy cập lại ứng dụngweb, cookies được browser gửi lên server giúp phục hồi lại những trạng thái củangười dùng trong lần truy cập trước đó.
Do được lưu trữ ở client nên người dùng có thể chỉnh sửa tùy ý, vì vậynếu ứng dụng web sử dụng những thông tin lưu trong cookies để xây dựng cáctruy vấn tới cơ sở dữ liệu thì hacker hoàn toàn có thể chèn vào cookies nhữngscript sql để thực hiện một cuộc tấn công SQL Injection [ CITATION Kyr221 \l
18441 ]
1.4 Chèn SQL Injection dựa trên headers HTTP
Các biến của máy chủ như headers HTTP cũng có thể là mục tiêu tấn côngcủa SQL Injection Nếu một ứng dụng web chấp nhận đầu vào từ các headersHTTP, các headers giả có chứa SQL Injection có thể xâm nhập vào cơ sở dữ liệu
Lỗ hổng chèn headers HTTP là một thuật ngữ bảo mật ứng dụng web đềcập đến tình huống khi kẻ tấn công đánh lừa ứng dụng web để chèn thêm tiêu đềHTTP vào các phản hồi HTTP hợp pháp Chèn tiêu đề HTTP là một kỹ thuật cóthể được sử dụng để tạo điều kiện cho các cuộc tấn công độc hại như tạo kịch bảntrang web chéo , nhiễm độc bộ nhớ cache web , v.v Do đó, những điều này cóthể dẫn đến tiết lộ thông tin, sử dụng ứng dụng của bạn trong các cuộc tấn cônglừa đảo và các hậu quả nghiêm trọng khác
Lỗ hổng chèn tiêu đề HTTP là kết quả của việc điều chỉnh quá mức đầuvào của người dùng Nếu nhà phát triển ứng dụng web sử dụng dữ liệu bên ngoàitrực tiếp trong các phản hồi HTTP, thì thường có thể thực hiện một cuộc tấn côngđưa vào tiêu đề HTTP
Ví dụ: Hãy tưởng tượng rằng doanh nghiệp của bạn đã chuyển sang mộtmiền mới và để thuận tiện, bạn muốn dấu trang của người dùng vẫn hoạt động.Tên miền ban đầu là example.com nhưng bây giờ trang web của bạn đã có tại
example.info Nếu người dùng thông thường của bạn truy cập vào một URL lỗi
Trang 13thời, chẳng hạn như http://www.example.com/page1 , bạn muốn máy chủ web tự
động chuyển hướng người dùng đến URL mới tương ứng như sau:
http://www.example.info/page1 Để đạt được mục tiêu trên, bạn có thể xây dựng
một ứng dụng web đơn giản tại example.com lấy đường dẫn từ yêu cầu HTTP và
gắn nó vào http://www.example.info/ [ CITATION Nidecki \l 18441 ]
1.5 Chèn SQL Injection bằng bậc hai
Một cuộc tấn SQL Injection bậc hai cung cấp các dữ liệu bị nhiễm độc, màđây là các dữ liệu có thể được xem là lành tình trong một trường hợp nhất định,nhưng chứa các mã độc trong trường hợp khác Bạn khó có thể nhận thức đượccác cuộc tấn công theo cách thức này [ CITATION PAV21 \l 18441 ]
Là một lỗ hổng bảo mật ứng dụng, nó xảy ra khi các giá trị do người dùnggửi được lưu trữ trong cơ sở dữ liệu và sau đó nó được sử dụng bởi một số chứcnăng khác trong ứng dụng mà không cần thoát hoặc lọc dữ liệu
Ví dụ: Tấn công trang web Haiderm.com như dưới đây Hacker đã biếtusername của tài khoản admin trang web là haider, nhưng chưa biết mật khẩu,hacker sẽ tiến hành các bước sau để có thể đăng nhập bằng tài khoản admin củatrang web:
Đăng ký một tài khoản mới có username: haider’ và mật khẩu là abc (Hình 2.4 2).
Hình 2.4.2 Trang đăng ký Haiderm.com
Đăng nhập trang web bằng tài khoản vừa tạo và thực hiện chứcnăng Đổi mật khẩu của trang web (Hình 2.4 3)
Trang 14Hình 2.4.3 Trang đổi mật khẩu Haiderm.com
Tiến hành đổi mật khẩu từ abc thành 123
Trang web sẽ thực hiện câu lệnh sau:
UPDATE users
SET password = ‘123’
WHERE username = ‘haider’ and password = ‘abc’
Sau dấu là comment nên câu lệnh được chương trình thực hiện sẽnhư sau:
UPDATE users
SET password = ‘123’
WHERE username = ‘haider’
Như vậy mật khẩu của tài khoản admin (username: haider) đã đượcđổi thành 123 => Hacker đã có thông tin tài khoản admin của web.[ CITATION Hai18 \l 18441 ]
Trang 15CHƯƠNG 3 CÁC DẠNG TẤN CÔNG SQL INJECTION 1.6 In-band SQL Injection
In-band SQL Injection là dạng tấn công phổ biến nhất và cũng dễ để khaithác lỗ hổng SQL Injection nhất, hình thức SQL Injection này giúp hacker có thể
tổ chức tấn công và thu thập kết quả trực tiếp trên cùng một kênh liên lạc.In-Band SQLi có 2 loại : Error-based SQLi và Union-based SQLi.[ CITATION Bui20 \l 18441 ]
1.6.1 Error-based SQL Injection
a) Tổng quan
Error-based SQL Injection là một kỹ thuật In-band injection cho phép kẻ tấn công khai thác kết quả lỗi từ cơ sở dữ liệu để thao tác trên dữ liệu của nó Thực hiện kỹ thuật này khiến cho cơ sở dữ liệu trả về một thông báo lỗi có chứa thông tin về cấu trúc của nó
Error-based SQL Injection yêu cầu sử dụng một lỗ hổng để buộc trích xuất
dữ liệu Lỗ hổng cho phép code để xuất ra lỗi SQL từ máy chủ thay vì dữ liệuđược yêu cầu như thông thường [ CITATION Oli22 \l 18441 ]
Trang 16Hình 3.1.4 Chèn nội dung bất kỳ để thay đổi tham số
Hệ thống trả về lỗi như sau (Hình 3.1 4):
o Error: You have an error in your SQL syntax; check the manualthat corresponds to your MySQL server version for the rightsyntax to use near ''bi_loi_ATvBM'' at line 1 Warning:mysql_fetch_array() expects parameter 1 to be resource,boolean given in /hj/var/www/listproducts.php on line 74
Từ thông báo trên kẻ tấn công có thể biết được các thông tin sau:
o Cơ sở dữ liệu hệ thống đang sử dụng là MySQL
o Cú pháp gây ra lỗi: 'bi_loi_ATvBM'
o Nơi xảy ra lỗi cú pháp trong truy vấn: sau tham số (cat = 1)
Thêm cú pháp: or (select * from abc) (Hình 3.1 5)
Hình 3.1.5 Chèn câu lệnh truy vấn vào url
Hệ thống trả về lỗi (Error: Reference source not found):
Trang 17o Error: Table 'acuart.abc' doesn't exist Warning:
mysql_fetch_array() expects parameter 1 to be resource,boolean given in /hj/var/www/listproducts.php on line 74
Từ thông báo trên ta biết được: Hệ thống này có một cơ sở dữ liệu làacuart và acuart có chứa thông tin về các sản phẩm
1.6.2 Union-based SQL Injection
Union-based SQL Injection là một kỹ thuật chèn SQL trong băng tần sửdụng toán tử UNION để kết hợp các kết quả của hai hoặc nhiều câu lệnhSELECT thành một kết quả duy nhất, sau đó được trả về như một phần của phảnhồi HTTP
Trong Union-based SQLi, kẻ tấn công sử dụng toán tử UNION để kết hợpmột câu lệnh SQL lành tính với một câu lệnh độc hại Câu lệnh độc hại phải sửdụng các cột và kiểu dữ liệu giống như câu lệnh gốc Cơ sở dữ liệu bị tấn công sẽ
xử lý câu lệnh kết hợp và thực thi mã độc
Có hai điều kiện để truy vấn UNION hoạt động:
Mỗi truy vấn độc lập phải trả về số cột bằng nhau
Mỗi cột phải chứa các kiểu dữ liệu tương thích với từng truy vấn
Ví dụ: Dùng kỹ thuật ‘Union Select’ để xác định số lượng cột trong bảng:
Kẻ tấn công gửi một chuỗi các giá trị null sau câu lệnh “unionselect” Ví dụ, ’ UNION SELECT NULL tiếp theo là ‘UNIONSELECT NULL, NULL , Khi cơ sở dữ liệu xác định rằng sốcột câu truy vấn trước ‘union select’ và số giá trị null là khôngkhớp, nó sẽ trả về thông báo lỗi (hoặc không trả về bất kỳ kết quảnào) Ngược lại, nếu số cột truy vấn trước khớp với số giá trị nullthì hệ thống trả về kết quả như bình thường
Số giá trị null hợp lệ chính là số cột của bảng mà hệ thống đangthực hiện truy vấn [ CITATION Oli221 \l 18441 ]
Trang 181.7 Inferential SQL Injection
Không giống như In-band SQLi, Inferential SQL Injection tốn nhiều thờigian hơn cho việc tấn công do không có bất kì dữ liệu nào được thực sự trả vềthông qua web application và hacker thì không thể theo dõi kết quả trực tiếp nhưkiểu tấn công In-band
Thay vào đó, kẻ tấn công sẽ cố gắng xây dựng lại cấu trúc cơ sở dữ liệubằng việc gửi đi các payloads, dựa vào kết quả phản hồi của web application vàkết quả hành vi của database server
Inferential SQL Injection có 2 dạng: boolean-based SQLi và time-based SQLi [ CITATION Bui201 \l 18441 ]
Blind-1.7.1 Blind-boolean-based SQL Injection
a) Tổng quan
Đây là kiểu tấn công mà hacker có chèn toán tử boolean vào trong câu truy vấn, hacker dựa vào việc gửi các truy vấn tới cơ sở dữ liệu bắt buộc ứng dụngtrả về các kết quả khác nhau phụ thuộc vào câu truy vấn là True hay False.Tuỳ thuộc kết quả trả về của câu truy vấn mà HTTP reponse có thể thay đổi, hoặc giữ nguyên
Kiểu tấn công này thường chậm (đặc biệt với cơ sở dữ liệu có kích thước lớn)
do người tấn công cần phải liệt kê từng dữ liệu, hoặc mò từng kí tự.[ CITATION Tra20 \l 18441 ]