Tải bản đầy đủ (.pdf) (36 trang)

Bài tập lớn môn an toàn mạng (1)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 36 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG

KHOA CƠNG NGHỆ THƠNG TIN

BÀI TIỂU LUẬN
MƠN AN TỒN MẠNG
Đề tài:
TÌM HIỂU CƠNG CỤ KHAI THÁC LỖ HỔNG
SỬ DỤNG CÔNG CỤ BBQSQL
Giảng viên hướng dẫn: TS. ĐẶNG MINH TUẤN
Sinh viên thực hiện : PHẠM THỊ ANH THƠ
Mã sinh viên
: B18DCAT243

Hà Nội, 2021


LỜI NĨI ĐẦU

Trước khi trình bày nội dung phần báo cáo tiểu luận của mình, em xin gửi lời cảm
ơn chân thành nhất tới T.S Đặng Minh Tuấn, người đã trực tiếp hướng dẫn, cung cấp các
tài liệu cho chúng em để chúng em có thể hồn thành được bài báo cáo này.
Do thời gian có hạn và hạn chế về mặt kiến thức, báo cáo không tránh khỏi một
vài sai sót nhỏ. Vì vậy, em rất mong nhận được ý kiến đóng góp của các thầy và các bạn
để đề tài được hoàn thiện hơn.
Hà Nội, tháng 12 năm 2021
Sinh viên thực hiện
Phạm Thị Anh Thơ

2



MỤC LỤC
DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT .................................... 5
DANH MỤC CÁC HÌNH VẼ ............................................................................................. 6
DANH MỤC BẢNG BIỂU ................................................................................................. 6
PHẦN MỞ ĐẦU ................................................................................................................. 7
CHƯƠNG 1: GIỚI THIỆU CHUNG .................................................................................. 8
1. 1. Giới thiệu về lỗ hổng Web theo TOP 10 OWASP................................................... 8
1.1.1. Tổng quan ........................................................................................................... 8
1.1.2. Một số kỹ thuật khai thác lỗ hổng bảo mật Web ................................................ 9
1.2. Giới thiệu về SQL Injection .................................................................................... 10
1.2.1. Lịch sử hình thành và phát triển SQL ............................................................... 10
1.2.2. Khái niệm SQL Injection .................................................................................. 11
1.2.3. Phân loại các kiểu tấn công SQL Injection ....................................................... 12
1.3. Giới thiệu Blind SQL Injection ............................................................................... 13
1.3.1. Khái niệm Blind SQL Injection ........................................................................ 13
1.3.2. Boolean Expoitation ......................................................................................... 14
1.3.3. Time – based Blind SQLi ................................................................................. 15
1.4. Giới thiệu công cụ BBQSQL .................................................................................. 16
CHƯƠNG 2: CÀI ĐẶT CÔNG CỤ BBQSQL TRÊN KALI LINUX ............................. 18
2.1. Yêu cầu trước khi cài đặt ........................................................................................ 18
2.2. Hướng dẫn cài đặt ................................................................................................... 18
2.3. Hướng dẫn sử dụng công cụ BBQSQL ................................................................... 22
2.3.1. Khởi động và các tuỳ chọn ............................................................................... 22
2.3.2. HTTP Parameters .............................................................................................. 24
2.3.3. BBQSQL Options ............................................................................................. 26
2.3.4. Export Config ................................................................................................... 28
2.3.5. Import Config ................................................................................................... 29
2.3.6. Custom Hooks................................................................................................... 29
CHƯƠNG 3: BÀI LAB DEMO VÀ KỊCH BẢN TẤN CÔNG ....................................... 31

3


3.1. Cách thức tấn công .................................................................................................. 31
3.2. So sánh BBQSQL với SQL Map ............................................................................ 33
KẾT LUẬN ....................................................................................................................... 34
TÀI LIỆU THAM KHẢO ................................................................................................. 35

4


DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT

Từ
viết tắt
BBQSQL
Blind
SQLi
CSS
ENISA
HTTP
IBM
IETF
IP
ISACA
ISO
NIST
OWASP
PHP
PIP

SEQUEL
SQLI
SQL

Thuật ngữ tiếng Anh/Giải
thích
Blind SQL Framework

Thuật ngữ tiếng Việt/Giải thích

Cơng cụ khai thác lỗ hổng
Một loại tấn công của SQL
Structured Query Language
Injection
Cross Site Scripting
Một lỗ hổng phổ biến trong Web
The European Union Agency
Cơ quan an toàn mạng và bảo mật
for Cybersecurity
thông tin của Liên minh châu Âu
Hypertext Transfer Protocol
Giao thức truyền tải siêu văn bản
Tập đồn cơng nghệ máy tính đa
International Business Machines
quốc gia
Lực lượng chuyên tách về kỹ thuật
Internet Engineering Task Force
liên mạng
Internet Protocol
Địa chỉ giao thức của Internet

Information Systems Audit and Hiệp hội nghề nghiệp quốc tế tập
Control Association
trung vào CNTT
International Organization for
Tổ chức tiêu chuẩn hóa quốc tế
Standardization
Viện Tiêu chuẩn và Công nghệ
National Institute of Standards
quốc gia của Bộ thương mại Hoa
and Technology
Kỳ
Open Web Application Security Dự án bảo mật ứng dụng Web mở
Project
- Tổ chức phi lợi nhuận
Hypertext Preprocessor
Ngơn ngữ lập trình kịch bản
Trình quản lý gói tiêu chuẩn
Preferred Installer Program
(package/module) cho Python.
Structured English Query
Tên ngơn ngữ trước khi đổi thành
Language
SQL
Một kỹ thuật được sử dụng trong
SQL Injection
tấn công các ứng dụng web,..
Structured Query Language
Ngôn ngữ truy vấn cấu trúc

5



DANH MỤC CÁC HÌNH VẼ
Hình 1.1. Danh sách top 10 lỗ hổng bảo mật theo OWASP năm 2021 ............................ 10
Hình 1.2. Phân loại các kiểu tấn công SQL Injection ....................................................... 12
Hình 1.3. Thơng tin tác giả và bên cấp giấy phép cơng cụ BBQSQL ............................... 16
Hình 1.4. Các phiên bản của BBQSQL ............................................................................. 17
Hình 2.1 : Import thêm Sources.list................................................................................... 19
Hình 2.2 : Thực hiện update/ upgrade sau khi import gói vào Sources.list ...................... 20
Hình 2.3 : Cài đặt Python 3 trong Kali Linux ................................................................... 20
Hình 2.4 : Xem phiên bản hiện tại của Python trong Kali Linux ...................................... 21
Hình 2.5 : Đặt Python3 làm phiên bản mặc định trong Kali Linux .................................. 21
Hình 2.6: Cài đặt Python3-pip ........................................................................................... 21
Hình 2.7: Cài đặt Python-gevent và Python-requests ........................................................ 22
Hình 2.8: Cài đặt BBQSQL ............................................................................................... 22
Hình 2.9 : Phiên bản BBQSQL ......................................................................................... 23
Hình 2.10: Giới thiệu về cơng cụ BBQSQL ...................................................................... 23
Hình 2.11: Danh sách các tùy chọn (menu) ...................................................................... 24
Hình 2.12 : Các options trong Menu của BBQSQL .......................................................... 26

DANH MỤC BẢNG BIỂU
Bảng 1: Tiêu chuẩn SQL đã trải qua một số phiên bản ..................................................... 11
Bảng 2: Danh sách các tùy chọn trong BBQSQL ............................................................. 24

6


PHẦN MỞ ĐẦU

Với nhu cầu trao đổi thông tin cần thiết ngày nay, bắt buộc các cơ quan, tổ chức

phải hoà vào mạng toàn cầu Internet. An toàn bảo mật thông tin là vấn đề quan trọng
hang đầu trong việc kết nối mạng nội quan, doanh nghiệp, tổ chức với Internet hay cá
nhân. Ngày nay, biện pháp an tồn thơng tin cho máy tính cá nhân hay các website trong
mạng nội bộ đã được nghiên cứu và triển khai. Tuy nhiên, thường xuyên xảy tình trạng
như: hệ thống mạng hay các website bị tấn công, các tổ chức bị đánh cắp thông tin gây
nên hậu quả vô cùng nghiêm trọng. Những vụ tấn công nhằm vào các hệ thống thuộc
công ty lớn như AT&T, IBM, trường đại học, cơ quan nhà nước, tổ chức quân sự, ngân
hàng, ... xảy ra rất thường xuyên, đôi lúc xảy ra một số vụ tấn cơng với quy mơ khổng lồ
vào các tập đồn tài chính hay các ngân hàng lớn. Hơn nữa những thông tin này chỉ là
phần nổi của tảng bang trôi. Một phần rất lớn các vụ tấn công không được thơng báo vì
nhiều lý do, trong số đó có thể kể đến nỗi lo mất uy tín hoặc đơn giản người quản trị dự
án không hay biết vụ tấn công nhằm vào hệ thống của họ.
Để đảm bảo hệ thống hay trang web là an toàn, người ta đã tạo ra các kỹ thuật kiểm
thử xâm nhập (Penetration Testing). Các kỹ thuật này dùng để phát hiện ra các lỗ hổng, rủi
ro hay mối đe doạ bảo mật mà các hacker có thể khai thác trong ứng dụng phần mềm, mạng
hay ứng dụng web. Mục đích của kiểm thử xâm nhập là xác định và kiểm tra tất cả lỗ hổng
bảo mật có thể có trong phần mềm.
Một trong số các công cụ dùng để khai thác lỗ hổng phục vụ cho việc kiểm thử xâm
nhập là BBQSQL, có khả năng khai thác lỗ hổng Blind SQL Injection.

7


CHƯƠNG 1: GIỚI THIỆU CHUNG
1. 1. Giới thiệu về lỗ hổng Web theo TOP 10 OWASP
1.1.1. Tổng quan
Trong thời đại công nghệ phát triển hiện nay, việc đảm bảo an ninh thông tin trên
không gian mạng đang là vấn đề dành được nhiều sự quan tâm. Nguy cơ mất an tồn thơng
tin đang là mối đe dọa lớn và ngày càng gia tăng đối với an ninh quốc gia. Có nhiều mục
tiêu mà tin tặc thường nhắm tới như các máy chủ dịch vụ mạng, hệ thống cơ sở hạ tầng

mạng.
Trong đó các hệ thống website đang là mục tiêu khá phổ biến do tính phổ cập và dễ
tiếp cận đối với tin tặc. Do đó việc bảo mật cho các website hiện được chú trọng và đặt ra
các yêu cầu đặc biệt đối với việc kiểm thử.
Các khái niệm liên quan đến hệ thống website bao gồm:
• Webserver: là một máy tính có kết nối internet được cài các chương trình đặc biệt
nhằm nhiệm vụ xử lý các yêu cầu từ phía người dùng và phản hồi các yêu cầu đó.
Máy chủ web có thể xử lý dữ liệu và cung cấp thông tin đến máy khách thông qua
các máy tính cá nhân trên mơi trường Internet qua giao thức HTTP, giao thức được
thiết kế để gửi các tệp tin đến trình duyệt Web, và các giao thức khác.
• Request: có thể hiểu là thơng tin gửi từ client (máy khách) lên server (máy chủ). Khi
sử dụng trình duyệt truy cập một địa chỉ nào đó. Ví dụ khi truy cập địa chỉ
google.com thì ngay lập tức trình duyệt sẽ dựa vào tên miền để gửi yêu cầu truy cập
đến địa chỉ IP mà tên miền này đang trỏ tới, lúc này phía máy chủ sẽ phân tích yêu
cầu và sẽ gửi luồng xử lý tới vị trí lưu trữ của mã nguồn PHP (hoặc mã nguồn bất
kì) và nhiệm vụ của các mã nguồn là tiếp nhận yêu cầu, phân tích u cầu đó và trả
kết quả lại cho máy khách là các trang web mà máy chủ Google tìm kiếm được.
• Response : là những dữ liệu mà máy chủ web trả về cho máy khách. Có thể là một
chuỗi HTML hoặc các dữ liệu đa phương tiện như ảnh, video… Trình duyệt web
của máy khách sẽ có nhiệm vụ xử lý và hiển thị các nội dung này thành giao diện
trực quan cho người sử dụng.
• Database: là nơi lưu trữ các nội dung của một website, trên cơ sở dữ liệu có thể lưu
thơng tin về các tài khoản, mật khẩu, email … của người dùng. Hoặc thậm chí là

8


các thông tin cực kỳ quan trọng như thông tin về thẻ thanh toán và hồ sơ y tế. Vậy
nên đây là một mục tiêu phổ biến của Hacker.
Lỗ hổng bảo mật (tiếng Anh: vulnerability) là một khái niệm phổ biến trong giới an

tồn thơng tin. Có rất nhiều định nghĩa khác nhau về lỗ hổng, nhưng tất cả đều có điểm
chung là ám chỉ một điểm yếu (kỹ thuật hoặc phi kỹ thuật) của một phần mềm, phần cứng,
giao thức, hay một hệ thống thông tin.
Dưới đây là một số định nghĩa về lỗ hổng bảo mật:
1. Theo Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST): Điểm yếu trong hệ thống thơng
tin, quy trình bảo mật hệ thống, kiểm sốt nội bộ hoặc cơng tác triển khai có thể bị khai
thác bởi tác nhân gây hại.
2. Theo ISO 27005: Điểm yếu của một tài sản hoặc nhóm tài sản có thể bị khai thác bởi
một hoặc nhiều mối đe dọa trên mạng, trong đó tài sản là bất cứ thứ gì có giá trị đối với tổ
chức, hoạt động kinh doanh của tổ chức và tính liên tục của những hoạt động đó, bao gồm
các tài ngun thơng tin hỗ trợ sứ mệnh của tổ chức.
3. Theo IETF RFC 4949: Một lỗ hổng hoặc điểm yếu trong thiết kế, triển khai hoặc vận
hành và quản lý của hệ thống có thể bị khai thác để vi phạm chính sách bảo mật của hệ
thống.
4. Theo ENISA: Sự tồn tại của một điểm yếu, thiết kế hoặc lỗi triển khai có thể dẫn đến một
sự cố khơng mong muốn làm tổn hại đến bảo mật của hệ thống máy tính, mạng, ứng dụng
hoặc giao thức liên quan.
5. Theo The Open Group: Xác suất khả năng của mối đe dọa vượt q khả năng chống lại
mối đe dọa đó. Phân tích nhân tố về rủi ro thông tin: Xác suất một tài sản sẽ không thể
chống lại hành động của một tác nhân đe dọa.
6. Theo ISACA: Một điểm yếu trong thiết kế, triển khai, vận hành hoặc kiểm soát nội bộ.
Cách thức hoạt động cơ bản của việc khai thác lỗ hổng bảo mật Web cơ bản: Hacker
sử dụng các cơng cụ dị qt để phát hiện một loạt các website có cấu hình bảo mật kém
hoặc website trên các nền tảng khác nhau như “WordPress” hay “Joomla” có các lỗ hổng
đã được công bố nhưng chưa được xử lý. Từ đó Hacker sẽ lợi dụng để tấn cơng, cài đặt các
mã độc và phá hoại các website nhằm trục lợi.
1.1.2. Một số kỹ thuật khai thác lỗ hổng bảo mật Web
Về cơ bản có nhiều loại lỗ hổng khác nhau và có nhiều cách phân chia khác nhau.
Các lỗ hổng có thể phân chia theo các nền tảng, thành phần có lỗ hổng. Hoặc chia theo
9



phương thức tấn cơng. Trong thực tế, có khá nhiều ứng dụng web khơng an tồn và phải
đối mặt với việc bị khai thác. Dưới đây là một số thống kê về số lượng các lỗ hổng trên
ứng dụng web được tìm ra được cập nhật mới nhất năm 2021, được thống kê bởi IBM.

Hình 1.1. Danh sách top 10 lỗ hổng bảo mật theo OWASP năm 2021
Lỗ hổng trên ứng dụng web có thể được chia thành hai phần chính:
• Lỗ hổng trên server: có thể kể tới như lỗ hổng liên quan tới việc xác thực người dùng, lỗ
hổng liên quan tới việc quản lý phiên (sesion), lỗ hổng liên quan tới cơ sở dữ liệu....
• Lỗ hổng trên client: có thể kể tới như Cross-site Scripting, On-site Request Forgery....

1.2. Giới thiệu về SQL Injection
1.2.1. Lịch sử hình thành và phát triển SQL
Năm 1974, D. Chamberlin (IBM San Jose Lab) định nghĩa ngôn ngữ SEQUEL
(Structured English Query Language). Một phiên bản sửa chữa, SEQUEL/2, đã được đưa
ra vào năm 1976 nhưng sau đó đổi tên thành SQL vì lý do pháp lý. Sau đó IBM tạo ra
một bản mẫu HQTCSDL gọi là System R, dựa trên SEQUEL/2.
Tuy nhiên gốc rễ của SQL là từ ngôn ngữ SQUARE (Specifying Queries as
Relational Expressions), là ngơn ngữ đã có trước dự án System R. Vào cuối 70s,
ORACLE xuất hiện và được xem là HQTCSDL thương mại đầu tiên dựa trên SQL.
Năm 1987, ANSI và ISO công bố chuẩn đầu tiên cho SQL. Năm 1989, ISO công
bố thêm phần phụ lục định nghĩa một ‘Nét cải tiến cho toàn vẹn’.
Năm 1992, phiên bản chỉnh sửa đầu tiên của chuẩn này có mặt, mang tên SQL2
hay SQL-92.
Năm 1999, SQL:1999 được phát hành với các chuẩn hỗ trợ cho quản lý dữ liệu
hướng đối tượng. Vào cuối năm 2003, SQL:2003 ra đời.
10



Bảng 1: Tiêu chuẩn SQL đã trải qua một số phiên bản
Năm
1986

Tên
SQL-86

Tên khác
SQL-87

1989
1992
1999
2003

SQL – 89
SQL – 92
SQL:1999
SQL:2003

Thay đổi nhỏ.
Thay đổi lớn

Chú giải
Được công bố đầu tiên bởi ANSI.
Được phê chuẩn bởi ISO năm 1987

1.2.2. Khái niệm SQL Injection
Việc truy cập thông tin bên trong một cơ sở dữ liệu gọi là Structured Query
Language (SQL). SQL được sử dụng để đọc, cập nhật, thêm, và xóa thơng tin được tổ

chức bên trong cơ sở dữ liệu. SQL là một ngôn ngữ được biên dịch và các ứng dụng web
thường xây dựng các câu lệnh SQL mà nó kết hợp với dữ liệu người dùng cung cấp. Nếu
điều này được thực hiện một cách khơng an tồn, các ứng dụng có thể bị SQL injection.
Lỗi này là một trong những lỗi trong ứng dụng web nổi tiếng nhất đã ảnh hưởng tới các
ứng dụng web.
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à thi hành các câu lệnh SQL bất hợp pháp.
Như chính tên của nó, mục đích của cuộc tấn cơng SQL Injection là tiêm mã SQL
bất hợp pháp, độc hại vào ứng dụng.
Trong các ứng dụng có dữ liệu này được chỉ định đi đến cơ sở dữ liệu như:
- Biểu mẫu (form) đăng nhập – người dùng nhập dữ liệu đăng nhập
- Biểu mẫu tìm kiếm – người dùng nhập dữ liệu tìm kiếm.
Thay vì nhập dữ liệu chính xác, kẻ tấn công sẽ nhập một câu lệnh truy vấn độc hại
vào bất kỳ nào vào, thì có khả năng xảy ra một số thiệt hại nghiêm trọng đối với cơ sở dữ
liệu và tồn bộ hệ thống.
SQL Injection 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ảu ứng dụng, thậm chí là server mà ứng dụng đó đang
11


chạy. SQL Injection thường được biết đến như là một vật trung gian tấn cơng trên các
ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL
Server, MySQL, Sysbase,…. Do đó, trong cuộc tấn công SQL Injection này, câu lệnh
SQL được sử dụng như một mã độc hại.
Các công cụ quét lỗ hổng của SQL Injection bao gồm:







SQLMap – Cơng cụ tiếp quản cơ sở dữ liệu và tiêm (inject) SQL tự động
jQuery Injection – Công cụ Java để tiêm cơ sở dữ liệu SQL tự động
BBQSQL – Công cụ khai thác SQL-Injection
NoQueryMap – Tự động cơ sở dư liệu NoQueryPwnage
Blisqy – Khaithác tính năng Blind SQL dựa trên thời gian trong các tiêu đề HTTP
(MySQL/MariaDB)
• …

1.2.3. Phân loại các kiểu tấn cơng SQL Injection

Hình 1.2. Phân loại các kiểu tấn công SQL Injection
1.2.3.a) In-band SQLi
12


Đây là dạng tấn công phổ biến nhất và cũng dễ để khai thác lỗ hổng SQL Injection
nhất. Xảy ra khi 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 chia làm 2 loại chính:
• Error-based SQLi
• Union-based SQLi
1.2.3.b) Inferential SQLi (Blind SQLi)
Không giống như In-band SQLi, Inferential SQL Injection tốn nhiều thời gian 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ệu bằ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.

Có 2 dạng tấn cơng chính:
• Blind-boolean-based
• Blind-time-based SQLi
1.2.3.c) Out-of-band SQLi
Out-of-band SQLi không phải dạng tấn công phổ biến, chủ yếu bởi vì nó phụ
thuộc vào các tính năng được bật trên Database Server được sở dụng bởi Web
Application.
Hình thức này chủ yếu được sử dụng để thay thể in-band và bland SQLi.
Out-of-band SQLi được thực hiện khi hacker không thể sử dụng cùng một kênh để
khởi tạo tấn công và thu thập thông tin, hoặc do server quá chậm không ổn định để thực
hiện tấn công. Các kỹ thuật này dựa vào khả năng server tạo ra các DNS hay HTTP
request để chuyển dữ liệu cho kẻ tấn công

1.3. Giới thiệu Blind SQL Injection
1.3.1. Khái niệm Blind SQL Injection
Blind SQL Injection là một kiểu tấn công SQL Injection truy vấn cơ sở dữ liệu sử
dụng các mệnh đề để đoán biết. Cách tấn công này thường được sử dụng khi mà một ứng
13


dụng web, apps,.. được cấu hình để chỉ hiển thị những thông báo lỗi chung chung, không
hiển thị ra lỗi của SQL. Blind SQL Injection đôi khi được gọi là SQL Inferential SQL.
Sự khác nhau giữa Blind SQL injection và các loại SQL injection khác: Đối với
SQL injection thông thường cho phép chúng ta khai thác thông tin trực tiếp từ cơ sở dữ
liệu. Đối với Blind, chúng ta phải đốn thơng tin dần dần dựa theo kết quả trả về là
TRUE FALSE. Do đó sẽ dẫn tới một vấn để đó là nếu thơng tin chúng ta cần lấy. ví dụ:
tên cơ sở dữ liệu, tên bảng, tên user q dài thì việc đốn sẽ gặp trở ngại lớn về thời gian.
1.3.2. Boolean Expoitation
Hacker gửi một câu truy vấn đến cơ sở dữ liệu, làm ứng dụng trả về một kết quả.
Kết quả này có thể khác nhau dựa vào câu truy vấn có thể đúng hay sai. Dựa trên kết quả

thơng tin trên HTTP Response có thể sửa đổi hoặc khơng. Sau đó phân tích sự khác biệt
trong câu trả lời giữa các lệnh TRUE và FALSE.
Sau đây là một ví dụ về một web bán hàng online, nơi hiển thị thơng tin sản phẩm
được bán có đường dẫn URL như sau:
/>Liên kết trên sẽ hiển thị thông tin chi tiết của sản phẩm có id=1 được lấy từ cơ sở
dữ liệu. Câu lệnh SQL cho liên kết này khi được yêu cầu là:

SELECT * FROM products WHERE id = 1
--hoặc
SELECT column_name, column_name_2 FROM table_name WHERE id = 1

Kẻ tấn công sẽ sửa lại truy vấn bằng các sửa url thành:
and 1 = 2

Câu lệnh SQL sẽ đổi thành:

SELECT * FROM products WHERE ID = 1 and 1=2
14


--hoặc
SELECT column_name, column_name_2 FROM table_name WHERE ID = 1 and
1=2
Điều này sẽ khiến truy vấn trả về sai và không có mục nào được hiển thị trong
thơng tin sản phẩm. Kẻ tấn cơng sau đó tiến hành thay đổi u cầu thành:
and 1 = 1

Và câu lệnh SQL lúc này lại đổi thành:
SELECT * FROM products WHERE ID = 1 and 1=1
--hoặc

SELECT column_name, column_name_2 FROM table_name WHERE ID = 1 and
1=1
Điều này trả về TRUE và các chi tiết của sản phẩm có id=1 hiển thị. Đây là một
dấu hiệu rõ ràng rằng ứng dụng này đang gặp lỗi SQL injection và chúng ta đã dùng
Blind SQL injection để tấn công.

1.3.3. Time – based Blind SQLi
Hacker gửi một câu truy vấn đến cơ sở dữ liệu, làm cho cơ sở dữ liệu đợi (trong
vài giây) trước khi có thể hoạt động. Sau đó hacker có thể xem thử thời gian cơ sở dữ liệu
cần để phản hồi một truy vấn là đúng hay sai. Dựa vào kết quả một HTTP Response sẽ
được tạo ra. Từ đó hacker có thể tìm ra thơng báo mà chúng đã sử dụng để trả về kết quả.
Một hành động phổ biến dùng cho thời gian là sleep.
Dựa trên ví dụ trước, kẻ tấn công trước tiên sẽ đánh giá thời gian phản hồi của máy chủ
web cho mộ truy vấn thông thường. Yêu cầu kẻ tấn công đưa ra là:
and if(1=1, sleep(10), false)
Nếu ứng dụng gặp lỗi SQL injection thì phản hồi sẽ bị trễ 10 giây.
Tóm lại, các Blind SQL Injection nếu bị thực hiện bằng các kĩ thuật tấn công brute force
yêu cầu nhiều requests hoặc có thể tự động hóa bằng việc sử dụng các cơng cụ tấn cơng
15


tự động như SQLmap, hoặc các công cụ tấn công bán tự đơng như BBQSQL thì sẽ bị lấy
tất cả các dữ liệu trong cơ sở dữ liệu nhạy cảm. Điều này mang lại hậu quả nghiêm trọng
cho các hệ thống.

1.4. Giới thiệu công cụ BBQSQL
Như nghiên cứu về Blind SQL Injection ( Blind SQLi) , có thể thấy rằng việc tấn
công vào Blind SQLi sẽ mang lại hậu quả nghiêm trọng rất lớn trong hệ thống. Tuy nhiên
Blind SQLi cũng là một khó khan để khai thác.
Khi các cơng cụ có sẵn hoạt động, chúng hoạt động tốt, nhưng khi khơng có, bạn

phải viết một cái gì đó tùy chỉnh. Điều này là tốn thời gian và tẻ nhạt. Lúc này BBQSQL
ra đời và giải quyết các khó khăn của công cụ tấn công tự động.
BBQSQL là một SQL Injection framework do Ben Toews (Security Consultant /
Researcher at Neohapsis ) và Scott Behrens (Senior Security Consultant /
Researcher at Neohapsis) phát triển và được viết bằng Python. Nó cực kỳ hữu ích khi
tấn cơng các lỗ hổng SQL Injection.
BBQSQL cũng là một công cụ bán tự động, cho phép tùy chỉnh khá nhiều đối với
những phát hiện chèn SQL khó kích hoạt. Cơng cụ này được xây dựng để trở thành bất
khả tri cơ sở dữ liệu và cực kỳ linh hoạt. Nó cũng có giao diện người dùng trực quan để
giúp thiết lập các cuộc tấn công dễ dàng hơn nhiều.
Thơng tin về BBQSQL:

Hình 1.3. Thơng tin tác giả và bên cấp giấy phép công cụ BBQSQL
16


Hình 1.4. Các phiên bản của BBQSQL
Giai đoạn bắt đầu phiên bản 1.0 từ 13/8/2012. Và phiên bản mới nhất được cập nhật theo
pypi.org là phiên bản 1.2 ngày 21/3/2013.

17


CHƯƠNG 2: CÀI ĐẶT CÔNG CỤ BBQSQL TRÊN KALI LINUX
Điều quan trọng nhất cần lưu ý về BBQSQL là nó không quan tâm đến dữ liệu
hoặc cơ sở dữ liệu bởi vì ta có thể tùy chỉnh cung cấp các cú pháp để điều khiển nó trở
thành bán tự động, trong khi hầu hết các công cụ SQL Injection được xây dựng với cơ sở
dữ liệu hoặc ngôn ngữ cụ thể (cơng cụ tự động)
Các tính năng của BBQSQL
• Nó tự động và rất nhanh trong việc phát hiện và khai thác các lỗ hổng SQL

injection khó tìm và khó tìm có trong một ứng dụng
• Bán tự động
• Có thể được sử dụng để tạo truy vấn tùy chỉnh và cú pháp tiêm.
• Cơ sở dữ liệu bất khả tri
• Linh hoạt
• Có thể được cấu hình để sử dụng hai kỹ thuật tìm kiếm (binary_search &
frequency_search)
• Nó cũng có thể được tùy chỉnh để tìm kiếm các giá trị cụ thể trong phản hồi
HTTP từ ứng dụng để xác định xem SQL injection có hoạt động hay khơng.
• Thực hiện xác thực đầu vào trên tất cả các tùy chọn cấu hình
• Có thể tùy chỉnh thư viện
• Yêu cầu một số thông tin nhất định trước khi có thể được sử dụng, chẳng hạn
như URL, Phương thức HTTP, Tiêu đề, Cookie, Phương pháp mã hóa và hơn
thế nữa
• Nhanh

2.1. Yêu cầu trước khi cài đặt
Các nền tảng được hỗ trợ: Linux, Windows, VMWare
Các phần mềm/môi trường cần thiết:
• Python trên Kali Linux
• Cơng cụ Pip cài đặt thư viện trên Python
• BBQSQL

2.2. Hướng dẫn cài đặt
Bước 1: Cài đặt Kali Linux
18


Trên bản cài đặt chuẩn của Kali Linux, với quyền truy cập mạng nhập mục
Nano /etc/apt/sources.list


Hình 2.1 : Import thêm Sources.list
Import thêm 2 gói:
deb kali-rolling main contrib non-free
Và kho lưu trữ nguồn: bằng cách sử dụng a deb trong kho, nó sẽ cho phép tải xuống các
gói nhị phân. Tuy nhiên, nếu yêu cầu nguồn cho một gói, có thể thêm deb-src dưới dạng
dòng bổ sung:
Deb-src kali-rolling main contrib non-free
Sau khi Import thêm Sources.list thì thực hiện lưu.
Thực hiện apt-get update và apt-get uprade để cập nhật lại.

19


Hình 2.2 : Thực hiện update/ upgrade sau khi import gói vào Sources.list
Bước 2: Tiến hành q trình cài đặt BBQSQL
Do BBQSQL là công cụ được viết bằng Python, nên khi cài đặt, để chạy được các gói thư
viện trong tool này, chúng ta cần phải cài đặt thêm Python và các package tương thích để
có thể chạy được tool
1. Cài đặt Python.
Ở đây em sử dụng tool BBQSQL version mới nhất là bản 1.3, nên sử dụng Python phiên
bản 3.
Câu lệnh:
$sudo apt-get install python3

Hình 2.3 : Cài đặt Python 3 trong Kali Linux

20



Kiểm tra phiên bản Python đang hoạt động

Hình 2.4 : Xem phiên bản hiện tại của Python trong Kali Linux
Do trên Kali mặc định Python phiên bản 2. Nên khi cài đặt Python phiên bản 3. ta tiến
hành đổi bản Python 3. thành mặc định.
Câu lệnh: update-alternatives –install /usr/bin/python python /usr/bin/python3 1

Hình 2.5 : Đặt Python3 làm phiên bản mặc định trong Kali Linux
2. Cài đặt Pip (Preferred Installer Program)
Để cơng cụ có thể import được đầy đủ các thư viện của tác giả, cần cài đặt Pip – trình
quản lý gói (Module/Package) tiêu chuẩn cho Python. Nó cho phép cài đặt và quản lý các
gói thư viện chung khơng phải là một phần của thư viện chuẩn Python.

Hình 2.6: Cài đặt Python3-pip
3. Cài đặt thêm Python-gevent và Python – requests
Câu lệnh:
$sudo apt-get install python3-gevent
$sudo apt-get install python3-requests

21


Hình 2.7: Cài đặt Python-gevent và Python-requests
4. Cài đặt BBQSQL
Sau khi cài đặt xong các công cụ hỗ trợ, tiến hành install tool BBQSQL
Câu lệnh:
$pip install bbqsql

Hình 2.8: Cài đặt BBQSQL


2.3. Hướng dẫn sử dụng công cụ BBQSQL
2.3.1. Khởi động và các tuỳ chọn
Khi cài đặt xong công cụ BBQSQL, ta vào công cụ bằng lệnh gọi : $bbqsql

22


Hình 2.9 : Phiên bản BBQSQL
Phần đầu tiên xuất hiện là giới thiệu về thơng tin của cơng cụ

Hình 2.10: Giới thiệu về cơng cụ BBQSQL
Ở dưới có danh dách menu tùy chọn

23


Hình 2.11: Danh sách các tùy chọn (menu)

Bảng 2: Danh sách các tùy chọn trong BBQSQL
Tùy chọn
1) Setup HTTP Parameters
2) Setup BBQSQL Options
3) Export Config
4) Import Config
5) Run Exploit
6) Help, Credits, and About
99) Exit the bbqsql injection toolkit

Chức năng
Tham số HTTP

Các loại BBQSQL
Cấu hình xuất
Cấu hình nhập
Chạy các lỗ hổng
Các tài liệu về BBQSQL
Thoát khỏi tool BBQSQL

2.3.2. HTTP Parameters
Tương tự như các công cụ SQL Injection khác, cần phải cung cấp những thơng tin
u cầu nhất định. BBQSQL có thể sử dụng những thông tin trên tham số HTTP này để
thực hiện các cuộc tấn công. Thông tin bao gồm:
- URL
- Phương thức HTTP ( HTTP method)
- Tiêu đề (headers)
- Cookies
- Phương pháp mã hóa (Encoding methods)
24


- Hành vi chuyển hướng (Redirect_behavior)
- Tệp(files)
- HTTP Auth
- Proxies
-…
2.3.2.a) Files
Cung cấp các tệp được gửi cùng với yêu cầu. Đặt giá trị cho đường dẫn và
BBQSQL sẽ xử lý việc mở / bao gồm tệp.
2.3.2.b) Headers
Tiêu đề HTTP sẽ được gửi cùng với các yêu cầu. Đây có thể là một chuỗi hoặc
một từ điển. Ví dụ:

{"User-Agent":"bbqsql"} hoặc là "User-Agent: bbqsql"
Sau khi cung cấp các thông tin yêu cầu rồi thì cần phải chỉ định nơi inject và inject
theo cú pháp nào.
2.3.2.c) Cookies
Từ điển hoặc chuỗi cookie sẽ được gửi cùng với yêu cầu. Ví dụ:
Cookies => {"PHPSESSIONID":"123123", ‘FOO’ : ‘BAR${query}’}
2.3.2.d) URL
Chỉ định một url mà các yêu cầu sẽ được gửi đến.
Injection có thể đi bất cứ đâu, ví dụ đường dẫn:
url => “?vuln=$(query)”
$(query)”: trong dấu ngoặc này là nơi mà chèn cú pháp truy vấn đến lỗ hổng.
2.3.2.e) Allow_redirect
Đây là một boolean xác định các chuyển hướng http ướt hơn sẽ được thực hiện khi
đưa ra yêu cầu.
25


×