HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA CƠNG NGHỆ THƠNG TIN
Học phần: An tồn mạng
Bài báo cáo:
Tìm hiểu về DotDotPwn
Sử dụng DotDotPwn để rà soát lỗ hổng
Giảng viên hướng dẫn: TS. Đặng Minh Tuấn
Sinh viên thực hiện: Ngô Đức Bình
Mã sinh viên: B18DCAT018
Hà Nội 2021
Mục lục
DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT .................................... 5
DANH MỤC HÌNH ẢNH ................................................................................................... 7
DANH MỤC BẢNG BIỂU ................................................................................................. 7
LỜI MỞ ĐẦU ..................................................................................................................... 8
Chương 1. Giới thiệu chung ................................................................................................ 9
1.1.
Giới thiệu về kiểm thử xâm nhập........................................................................... 9
1.1.1.
Kiểm thử xâm nhập là gì ................................................................................. 9
1.1.2.
Các giai đoạn kiểm thử xâm nhập ................................................................... 9
1.1.3.
Các phương pháp kiểm thử xâm nhập........................................................... 11
1.1.4.
Kiểm thử xâm nhập và tường lửa ứng dụng web .......................................... 12
1.2.
Giới thiệu về lỗ hổng directory traversal ............................................................. 13
1.2.1.
Directory traversal là gì ................................................................................. 13
1.2.2.
Đọc các file tuỳ ý bằng directory traversal ................................................... 13
1.2.3.
Những trở ngại thường gặp khi khai thác lỗ hổng path traversal.................. 14
1.2.4.
Cách phòng chống tấn cơng directory traversal ............................................ 15
1.3.
Giới thiệu về Fuzzing ........................................................................................... 16
1.3.1.
Ví dụ đơn giản ............................................................................................... 16
1.3.2.
Lịch sử ........................................................................................................... 17
1.3.3.
Triển khai Fuzzer .......................................................................................... 17
1.3.4.
So sánh với phân tích mật mã ....................................................................... 17
1.3.5.
Các kiểu tấn công .......................................................................................... 18
1.3.6.
Fuzzing ứng dụng .......................................................................................... 18
2
1.3.7.
Fuzzing giao thức .......................................................................................... 19
1.3.8.
Fuzzing định dạng file ................................................................................... 19
1.3.9.
Ưu điểm của fuzzer ....................................................................................... 19
1.3.10.
Hạn chế của fuzzer ..................................................................................... 19
1.3. Giới thiệu về DotDotPwn ........................................................................................ 20
1.4. Lịch sử hình thành ................................................................................................... 20
Chương 2. Hướng dẫn cài đặt và sử dụng ......................................................................... 22
2.1. Cài đặt DotDotPwn ................................................................................................. 22
2.2. Sử dụng DotDotPwn ............................................................................................... 22
2.2.1. Khởi động và các tuỳ chọn ............................................................................... 22
2.2.2. Chế độ HTTP .................................................................................................... 23
2.2.3. Chế độ HTTP URL ........................................................................................... 24
2.2.4. Chế độ FTP ....................................................................................................... 24
2.2.5. Chế độ TFTP ..................................................................................................... 25
2.2.6. Chế độ PAYLOAD ........................................................................................... 25
2.2.7. Chế độ STDOUT .............................................................................................. 25
Chương 3. Bài lab và kịch bản demo ................................................................................ 26
3.1. Dùng DotDotPwn để tạo đường dẫn bằng chế độ stdout ........................................ 26
3.1.1. Yêu cầu ............................................................................................................. 26
3.1.2. Tiến hành .......................................................................................................... 26
3.2. Dùng DotDotPwn để quét chế độ http-url .............................................................. 28
3.2.1. Yêu cầu ............................................................................................................. 28
3.2.2. Tiến hành .......................................................................................................... 28
Chương 4. So sánh, đánh giá ............................................................................................. 31
3
4.1. So sánh .................................................................................................................... 31
4.2. Đánh giá .................................................................................................................. 32
Kết luận.............................................................................................................................. 33
Tài liệu tham khảo ............................................................................................................. 34
4
DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT
Từ
viết tắt
Thuật ngữ tiếng Anh/Giải thích
Thuật ngữ tiếng Việt/Giải thích
Giao diện lập trình ứng dụng
API
Application Programming Interface
CSRF
Cross-site Request Forgery
DNS
Domain Name System
Hệ thống phân giải tên miền
DoS
Denial Of Service
Hình thức tấn cơng từ chối dịch vụ
ERP
Enterprise Resource Planning
Hoạch định nguồn lực doanh nghiệp
FTP
File Transfer Protocol
Giao thức truyền tải tập tin
HTTP
Hypertext Transfer Protocol
Giao thức truyền tải siêu văn bản
HTTPS
Hypertext Transfer Protocol Secure
IP
Internet Protocol
Kỹ thuật tấn cơng giả mạo chính chủ
thể của nó
Giao thức truyền tải siêu văn bản
bảo mật
Giao thức Internet
Tiêu chuẩn an ninh thông tin bắt
PCI DSS
Payment Card Industry Data
buộc dành cho các doanh nghiệp lưu
Security Standard
trữ, truyền tải và xử lý thẻ thanh
toán
Kiến trúc sử dụng trong việc giao
REST
Representational State Transfer
tiếp giữa máy khách và máy chủ
web
RPC
Remote Procedure Call
Cuộc gọi thủ tục từ xa
Bộ tiêu chí được phát triển bởi Viện
SOC 2
System and Organization Controls 2 Kế tốn Cơng chứng Hoa Kỳ
(AICPA)
SQL
Structured Query Language
Ngôn ngữ truy vấn dữ liệu
5
Tiêu chuẩn của công nghệ bảo mật,
SSL
Secure Sockets Layer
truyền thông mã hố giữa máy chủ
Web server và trình duyệt
Kỹ thuật tấn công yêu cầu giả mạo
SSRF
Server Side Request Forgery
STDOUT
Standard Output
Đầu ra tiêu chuẩn
TCP
Transmission Control Protocol
Giao thức điều khiển truyền vận
TFTP
Trivial File Transfer Protocol
UDP
User Datagram Protocol
Giao thức dữ liệu người dùng
UI
User Interface
Giao diện người dùng
URL
Uniform Resource Locator
Định vị tài nguyên thống nhất
WAF
Web Application Firewall
Tường lửa ứng dụng web
từ phía máy chủ
Giao thức truyền tải tập tin tầm
thường
Lỗi bảo mật cho phép người tấn
XSS
Cross Site Scripting
công chèn các đoạn script nguy
hiểm vào trong source code ứng
dụng web
6
DANH MỤC HÌNH ẢNH
Hình 1. Quy trình kiểm thử xâm nhập ................................................................................. 9
Hình 2. Minh hoạ lỗ hổng Directory Traversal ................................................................. 13
Hình 4. Trang web bWAPP ............................................................................................... 26
Hình 5. Thực thi câu lệnh .................................................................................................. 27
Hình 6. Nội dung file passwd ............................................................................................ 28
Hình 7. DotDotPwn ngay lập tức tìm ra được lỗ hổng...................................................... 29
Hình 8. File passwd ........................................................................................................... 30
DANH MỤC BẢNG BIỂU
Bảng 1. Lịch sử hình thành ................................................................................................ 21
Bảng 2. Danh sách tuỳ chọn .............................................................................................. 23
Bảng 3. So sánh DotDotPwn với một vài công cụ khác ................................................... 32
7
LỜI MỞ ĐẦU
Với sự phát triển nhanh chóng của Internet, ngày càng có nhiều các trang web và hệ
thống được tạo ra. Kèm theo đó là nhu cầu bảo vệ các hệ thống mạng ngày càng tăng cao
và trở thành một trong những vấn đề được quan tâm hàng đầu. Đa số các trang web hay hệ
thống đều tồn tại một hoặc một vài lỗ hổng nào đó và trở thành mục tiêu của những kẻ tấn
công. Thiệt hại gây ra từ những kẻ tấn cơng có thể trở nên rất lớn nếu hệ thống không được
bảo vệ đúng cách.
Để đả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 để kiểm thử xâm nhập là DotDotPwn, có khả năng
tìm kiếm lỗ hổng Traversal Directory.
8
Chương 1. Giới thiệu chung
1.1.
Giới thiệu về kiểm thử xâm nhập
1.1.1. Kiểm thử xâm nhập là gì
Kiểm thử xâm nhập (Penetration Testing hay Pentest) là một q trình mơ phỏng
các cuộc tấn cơng tới hệ thống máy tính để tìm lỗ hổng có thể khai thác được. Trong bảo
mật ứng dụng web, kiểm thử xâm nhập web thường được dùng để tăng cường bảo mật cho
tường lửa ứng dụng web (Web Application Firewall, WAF).
Kiểm thử xâm nhập liên quan đến việc cố gắng xâm nhập các hệ thống ứng dụng
(ví dụ như các giao diện lập trình ứng dụng (API), các server frontend/backend) để tìm ra
lỗ hổng bảo mật.
Thơng tin thu được sau khi kiểm thử có thể dùng để tinh chỉnh các chính sách bảo
mật và vá các lỗ hổng.
1.1.2. Các giai đoạn kiểm thử xâm nhập
Quy trình kiểm thử xâm nhập gồm 5 giai đoạn.
Hình 1. Quy trình kiểm thử xâm nhập
9
Giai đoạn 1: Lập kế hoạch và trinh sát
Giai đoạn 1 bao gồm:
• Xác định mục tiêu và phạm vi của thử nghiệm, bao gồm hệ thống đích và các
phương pháp sẽ được sử dụng.
• Thu thập thơng tin (ví dụ như mạng và tên miền, mail server) để hiểu rõ cách
thức hoạt động của đối tượng và các lỗ hổng tiềm ẩn của nó.
Giai đoạn 2: Rà quét
Giai đoạn tiếp theo để hiểu cách ứng dụng sẽ phản hồi lại với các hành động xâm
nhập khác nhau. Việc này thường làm bằng cách:
• Phân tích tĩnh: Kiểm tra code của ứng dụng để ước tính cách thức hoạt động
của nó. Các cơng cụ có thể qt tồn bộ code trong 1 lần chạy.
• Phân tích động: Kiểm tra code của ứng dụng khi nó đang chạy. Đây là cách
quét thực tế hơn, vì nó cung cấp cái nhìn thực tế về hiệu suất của ứng dụng.
Giai đoạn 3: Có được quyền truy cập
Giai đoạn này sử dụng các kỹ thuật tấn cơng ứng dụng web, ví dụ như cross-site
scripting, SQL injection hay backdoor, để tìm ra lỗ hổng bảo mật của mục tiêu. Sau đó
người kiểm tra sẽ thử khai thác các lỗ hổng đó, thường bằng cách leo thang đặc quyền,
đánh cắp dữ liệu, chặn lưu lượng truy cập, v.v., để hiểu được những thiệt hại có thể gây ra.
Giai đoạn 4: Duy trì quyền truy cập
Mục tiêu của giai đoạn này là để xem liệu lỗ hổng có thể được sử dụng để khai thác
lâu dài trong hệ thống hay không – đủ lâu để kẻ tấn cơng có thể truy cập sâu hơn. Ý tưởng
là bắt chước các mối đe doạ nâng cao, thường tồn tại trong hệ thống hàng tháng để đánh
cắp các dữ liệu nhạy cảm của tổ chức.
Giai đoạn 5: Phân tích
10
Kết quả của quá trình kiểm thử xâm nhập sẽ được tổng hợp thành một báo cáo chi
tiết:
• Các lỗ hổng cụ thể đã được khai thác
• Các thơng tin nhạy cảm bị truy cập
• Thời gian người kiểm tra tồn tại trong hệ thống mà không bị phát hiện
Những thông tin này sẽ được nhân viên bảo mật phân tích để giúp cấu hình WAF
của doanh nghiệp và các ứng dụng khác, giúp vá lỗ hổng và chống các cuộc tấn công trong
tương lai.
1.1.3. Các phương pháp kiểm thử xâm nhập
a. Kiểm tra bên ngoài
Các bài kiểm tra xâm nhập bên ngoài nhắm vào các tài sản của một cơng ty trên
internet, ví dụ như ứng dụng web, trang web của cơng ty, email và DNS server. Mục đích
là có được quyền truy cập và trích xuất dữ liệu có giá trị.
b. Kiểm tra nội bộ
Trong kiểm tra nội bộ, người kiểm tra có quyền truy cập vào một ứng dụng đằng
sau tường lửa sẽ mô phỏng một cuộc tấn công của một kẻ nội gián. Điều này không nhất
thiết là phải mơ phỏng một nhân viên có ý đồ xấu. Một tình huống phổ biến là một nhân
viên bị đánh cắp thông tin do cuộc tấn công lừa đảo.
c. Kiểm tra không thông tin
Trong kiểm tra không thông tin, người kiểm tra chỉ được cung cấp tên của doanh
nghiệp mục tiêu. Điều này giúp nhân viên bảo mật có một cái nhìn thực tế về cách một
cuộc tấn công sẽ diễn ra.
d. Kiểm tra không thông tin song phương
11
Trong kiểm tra không thông tin song phương, nhân viên bảo mật sẽ không được biết
trước về cuộc tấn công giả. Giống như trong thực tế, họ sẽ khơng có thời gian để tăng
cường bảo mật trước khi một cuộc tấn cơng diễn ra.
e. Kiểm tra có chủ đích
Trong tình huống này, cả 2 bên người kiểm tra và nhân viên bảo vệ sẽ làm việc với
nhau và đánh giá hành động của nhau. Đây là bài huấn luyện có giá trị, cung cấp cho nhóm
bảo mật thơng tin phản hồi thực tế theo quan điểm của một kẻ tấn công.
1.1.4. Kiểm thử xâm nhập và tường lửa ứng dụng web
Kiểm thử xâm nhập và WAF là các biện pháp bảo mật khác nhau nhưng có chung
lợi ích.
Đa số trong các phương pháp kiểm thử xâm nhập, người kiểm tra thường dùng dữ
liệu của WAF (như log) để xác định và khai thác lỗ hổng của ứng dụng.
Đổi lại, người quản trị WAF có thể hưởng lợi từ kiểm thử xâm nhập. Sau khi kiểm
tra xong, có thể cấu hình lại WAF để chống lại các điểm yếu đã được phát hiện.
Cuối cùng, kiểm thử xâm nhập cũng thoả mãn một số quy trình kiểm tra bảo mật,
trong đó có PCI DSS và SOC 2. Một vài tiêu chuẩn như PCI-DSS 6.6 chỉ có thể được đáp
ứng thơng qua việc sử dụng WAF được chứng nhận. Tuy nhiên việc này cũng khơng khiến
kiểm thử xâm nhập kém hữu ích hơn do những lợi ích và khả năng cải thiện WAF như đã
nói ở trên. [1]
12
1.2.
Giới thiệu về lỗ hổng directory traversal
Hình 2. Minh hoạ lỗ hổng Directory Traversal
1.2.1. Directory traversal là gì
Directory traversal (hay còn được biết đến là path traversal) là một lỗ hổng bảo mật
web cho phép kẻ tấn công đọc file bất kỳ trên server chạy ứng dụng đó. Nó có thể là code
ứng dụng và dữ liệu, thông tin xác thực cho hệ thống back-end, các file nhạy cảm của hệ
điều hành. Trong một vài trường hợp, kẻ tấn công cũng có thể ghi lên file bất kỳ, cho phép
họ chỉnh sửa ứng dụng hoặc hành vi, và cuối cùng chiếm toàn bộ quyền điều khiển server.
1.2.2. Đọc các file tuỳ ý bằng directory traversal
Giả sử một ứng dụng mua sắm hiện các hình ảnh hàng hố. Hình ảnh được gọi qua
HTML như sau:
<img src="/loadImage?filename=218.png">
URL loadImage nhận một tham số filename và trả về nội dung của file đó. File hình
ảnh được lưu trên ổ cứng ở địa chỉ /var/www/images. Để trả về hình ảnh, ứng dụng đưa
13
phần tên file được yêu cầu về thư mục gốc và dùng API của hệ thống file để đọc nội dung
của file. Trong trường hợp trên, ứng dụng đọc theo đường dẫn sau:
/var/www/images/218.png
Ứng dụng khơng được lập trình biện pháp phịng chống nào trước tấn cơng directory
traversal, vậy nên kẻ tấn cơng có thể u cầu đường dẫn sau để lấy được file bất kỳ trong
hệ thống file của server:
/>Điều này khiến cho ứng dụng đọc từ đường dẫn sau:
/var/www/images/../../../etc/passwd
Chuỗi ../ được coi là đường dẫn hợp lệ, và mang ý nghĩa lùi về 1 bậc trong kết cấu
thư mục. 3 chuỗi ../ liên tiếp lùi từ /var/www/images đến thư mục gốc, và file đọc được
cuối cùng là:
/etc/passwd
Trên các hệ điều hành Unix, đây là một file tiêu chuẩn chứa thông tin người dùng
của server.
Trên Windows, cả hai ../ và ..\ đều là các chuỗi directory traversal hợp lệ, và cuộc
tấn công tương đương để lấy file hệ thống sẽ là:
/>1.2.3. Những trở ngại thường gặp khi khai thác lỗ hổng path traversal
Nhiều ứng dụng đặt input của người dùng vào đường dẫn thực hiện một vài kiểu
phòng thủ để chống lại tấn cơng path traversal, và chúng thường có thể bị bỏ qua.
Nếu một ứng dụng tách hoặc chặn các chuỗi directory traversal từ tên file do người
dùng cung cấp, thì có thể bỏ qua sự bảo vệ bằng nhiều kỹ thuật khác nhau.
14
Chúng ta có thể sử dụng đường dẫn tuyệt đối từ thư mục gốc của hệ thống, chẳng
hạn như filename=/etc/passwd, để trực tiếp tham chiếu file mà không cần dùng bất cứ chuỗi
truyền tải nào.
Chúng ta cũng có thể dùng các chuỗi lồng nhau như ….// hay ….\/, mà sẽ trở về
thành các chuỗi thông thường khi phần chuỗi bên trong bị loại bỏ.
Trong một số ngữ cảnh, ví dụ như đường dẫn URL hoặc tham số filename của một
yêu cầu multipart/form-data, web server sẽ loại bỏ bất kỳ chuỗi duyệt thư mục trước khi
đưa input đến ứng dụng. Chúng ta đơi khi có thể bỏ qua bước lọc này bằng cách mã hố
URL, hoặc thậm chí mã hố URL hai lần, chuỗi ký tự ../ trở thành %2e%2e%2f hoặc
%252e%252e%252f. Các mã hố khơng chuẩn khác, chẳng hạn như ..%c0%af hay
..%ef%bc%8f cũng có thể làm được điều này.
Nếu một ứng dụng yêu cầu tên file do người dùng cấp phải bắt đầu tại thư mục ban
đầu, ví dụ như /var/www/images, thì ta có thể bao gồm cả phần thư mục được yêu cầu, theo
sau đó là chuỗi duyệt thư mục phù hợp. Ví dụ:
filename=/var/www/images/../../../etc/passwd
Nếu một ứng dụng yêu cầu tên file do người dung cung cấp phải kết thúc bằng một
đi mở rộng nào đó, ví dụ như .png, thì ta có thể dùng null byte để loại bỏ phần đi mở
rộng bắt buộc. Ví dụ:
filename=../../../etc/passwd%00.png
1.2.4. Cách phịng chống tấn cơng directory traversal
Cách hiệu quả nhất để phịng tránh lỗ hổng file path traversal đó là tránh đưa các
input của người dùng vào API của hệ thống file. Nhiều ứng dụng có chức năng này có thể
được viết lại để mang lại hành vi tương đương nhưng an toàn hơn.
Nếu như không thể tránh không đưa input của người dùng vào API của hệ thống
file, thì 2 lớp bảo mật nên được dùng với nhau để tránh các cuộc tấn cơng:
• Ứng dụng nên xác nhận input của người dùng trước khi thực hiện nó. Lý
tưởng nhất là nên xác nhận bằng cách đối chiếu với một danh sách các giá trị
15
được cho phép. Nếu như chức năng này không thể thực hiện được, thì phần
xác nhận nên xác thực được rằng input chỉ chứa những nội dung được cho
phép, ví dụ như chỉ thuần ký tự chữ số.
• Sau khi xác thực input được cấp, ứng dụng nên thêm phần input vào thư mục
ban đầu và dùng API của hệ thống file và chuẩn hoá đường dẫn. Cần phải
xác thực được đường dẫn được chuẩn hoá xuất phát từ thư mục ban đầu như
đã định.
Dưới đây là ví dụ Java code để xác thực đường dẫn chuẩn hoá của một file dựa trên
input của người dùng:
File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
// process file
} [2]
1.3.
Giới thiệu về Fuzzing
Fuzz testing hay Fuzzing là một kỹ thuật kiểm thử phần mềm hộp đen, về cơ bản
bao gồm việc tìm ra các lỗi triển khai bằng cách chèn dữ liệu sai định dạng theo cách tự
động.
1.3.1. Ví dụ đơn giản
Giả sử một số ngun trong một chương trình, trong đó chứa kết quả lựa chọn của
người dùng giữa 3 câu hỏi. Khi người dùng chọn một cái, lựa chọn sẽ là 0, 1 hoặc 2. Điều
đó tạo ra 3 trường hợp khác nhau. Nhưng nếu chúng ta truyền 3, hoặc 255? Chúng ta có
thể, vì số ngun được chứa ở dạng kích cỡ tĩnh. Nếu phần chuyển đổi mặc định không
được lập trình an tồn, chương trình có thể bị crash và dẫn đến lỗi bảo mật “điển hình”:
buffer overflow, DoS,…
Fuzzing là nghệ thuật tìm lỗi tự động, và vai trị của nó là tìm lỗi lập trình phần
mềm, và xác định nó nếu có thể.
16
1.3.2. Lịch sử
Fuzz testing được phát triển tại Đại học Wisconsin Madison vào năm 1989 bởi Giáo
sư Barton Miller và sinh viên. Cơng trình của họ có thể xem được tại
; nó hướng đến fuzzing dịng lệnh và UI, và cho thấy
rằng các hệ điều hành hiện nay có thể bị tấn công bởi fuzzing đơn giản.
1.3.3. Triển khai Fuzzer
Một fuzzer là một chương trình chèn tự động các dữ liệu bán ngẫu nhiên vào một
chương trình/hệ thống khác và phát hiện lỗi.
Phần sinh dữ liệu bao gồm các bộ sinh dữ liệu, và phát hiện lỗ hổng dựa vào các
công cụ sửa chữa lỗi. Bộ sinh dữ liệu thường sử dụng kết hợp các giá trị fuzzing tĩnh (các
giá trị được biết là nguy hiểm), hoặc dữ liệu hoàn toàn ngẫu nhiên. Các fuzzer thế hệ mới
sử dụng thuật toán di truyền để nối dữ liệu được chèn và quan sát kết quả. Những công cụ
như vậy chưa được cơng khai.
1.3.4. So sánh với phân tích mật mã
Số lượng các giải pháp có thể thử là khơng gian các giải pháp có thể khám phá. Mục
đích của phân tích mật mã là giảm khơng gian này, có nghĩa là tìm ra cách có ít khố để
thử hơn là bruteforce thuần t để giải mã thứ gì đó.
Đa số các fuzzer là:
• protocol/file-format độc lập
• data-type độc lập
Tại sao?
• Thứ nhất, đó là bởi vì fuzzer phải được nối đến kênh input, kênh này được
nối đến mục tiêu
• Thứ hai, bởi vì một chương trình chỉ hiểu được những dữ liệu đủ cấu trúc.
Nếu chúng ta kết nối thô đến web server, nó sẽ chỉ phản hồi đến những lệnh
17
được cấu trúc như GET (hoặc có thể crash ln). Sẽ có thể tốn ít thời gian
hơn nếu bắt đầu chuỗi với “GET”, và fuzz phần còn lại, nhưng hạn chế là sẽ
bỏ qua tất cả các kiểm tra với từ đầu tiên.
Về vấn đề này, fuzzer thường cố gắng giảm số lượng các kiểm tra vơ dụng, ví dụ
như là các giá trị mà chúng ta đã biết rằng sẽ có ít khả năng hoạt động. Chúng ta giảm tính
khơng thể đốn trước và có lợi hơn về tốc độ.
1.3.5. Các kiểu tấn công
Một fuzzer sẽ thử tấn công kết hợp theo kiểu:
• number (signed/unsigned integers/float…)
• chars (url, input dịng lệnh)
• metadata: văn bản do người dùng nhập (id3 tag)
• chuỗi nhị phân thuần tuý
Một cách tiếp cận chung tới fuzzing đó là định nghĩa các danh sách “giá trị nguy
hiểm” (fuzz vector) cho mỗi loại, và chèn chúng hoặc tái hợp.
• đối với số ngun: số khơng, số âm hoặc số cực lớn
• đối với chữ cái: các ký tự/chỉ dẫn có thể giải thích được
• đối với nhị phân: ngẫu nhiên
1.3.6. Fuzzing ứng dụng
Dù hệ thống cần fuzz có là gì đi nữa, các vector tấn cơng đều liên quan đến vào/ra.
Đối với một ứng dụng máy tính:
• Giao diện (thử hết tất cả kết hợp nút bấm/văn bản nhập)
• Các tuỳ chọn dịng lệnh
• Khả năng nhập/xuất
18
Đối với ứng dụng web: url, biểu mẫu, nội dung người dùng tạo ra, yêu cầu RPC,…
1.3.7. Fuzzing giao thức
Một fuzzer giao thức gửi các gói tin giả mạo đến ứng dụng được kiểm tra, hoặc có
thể hoạt động như một trung gian, sửa đổi yêu cầu và gửi lại chúng.
1.3.8. Fuzzing định dạng file
Một fuzzer định dạng file tạo ra nhiều mẫu không đúng định dạng, và mở chúng lần
lượt. Khi chương trình crash, thơng tin sửa lỗi được giữ lại để điều tra thêm.
Một fuzzer có thể tấn cơng:
• Lớp phân tích cú pháp (lớp chứa): các ràng buộc về định dạng tệp, cấu trúc,
quy ước, độ lớn của trường, cờ, …
• Lớp codec/ứng dụng: tấn cơng cấp thấp, nhắm đến phần lõi của chương trình
1.3.9. Ưu điểm của fuzzer
Ưu điểm lớn của fuzz testing chính là thiết kế kiểm tra rất đơn giản, và khơng bị bó
buộc bởi hành vi của hệ thống.
Phương pháp có hệ thống/ngẫu nhiên này giúp tìm được những lỗi thường bị bỏ sót
bởi con người. Thêm vào đó, khi hệ thống được thử nghiệm hồn tồn kín, fuzzing là 1
trong những cách duy nhất để xem xét chất lượng của nó.
1.3.10.Hạn chế của fuzzer
Fuzzer thường tìm ra được những bug đơn giản, thêm vào đó một khi fuzzer tuân
theo một giao thức, nó sẽ ít tìm ra được lỗi lạ hơn. Vì vậy người ta thường dùng phương
pháp đầy đủ/ngẫu nhiên.
Một vấn đề khác đó chính là khi ta tấn cơng một hệ thống kín, điều đó làm khó khăn
cho việc đánh giá mức độ nguy hiểm của lỗ hổng tìm được (khơng có khả năng sửa lỗi).
[3]
19
1.3. Giới thiệu về DotDotPwn
DotDotPwn là một công cụ fuzzing thơng minh cho phép kẻ tấn cơng tìm được lỗ
hổng tiềm ẩn có thể liên quan đến directory traversal trong một dịch vụ. Cơng cụ hoạt động
tốt và có thể giúp phát hiện lỗi bằng các giao thức web server như TFTP, HTTP và FTP.
Cơng cụ cũng có thể khá hữu dụng khi sử dụng để kiểm thử các ứng dụng web.
Công cụ được viết bằng ngôn ngữ Perl.
1.4. Lịch sử hình thành
Thời gian
Phiên bản
21/8/2010 v1.0
Nội dung
Phát hành lần đầu
-update để cập nhật dữ liệu
Chỉ tìm file boot.ini trên Windows
HTTP/FTP server
2/9/2010 v2.0 (không công khai)
Từ công cụ kiểm tra thành fuzzer
-O để tìm hệ điều hành
-s để phát hiện dịch vụ
-d chọn độ sâu
-f nhận file nào đó
-U và -P để nhập username,
password
-t thời gian giữa mỗi lần thử
-x chọn cổng TCP/UDP khác
-b dừng khi tìm ra được lỗ hổng
-q chế độ im lặng
14/10/2010 v2.1 (không công khai)
STDOUT module
29/10/2010 v2.1 (ra mắt tại BugCon Security
TFTO module
Conferences 2010)
-k tìm từ khố để tránh kết quả sai
lệch
20
-p chọn payload
21/7/2011 v3.0beta (demo tại Campus Party
Mexico 2011)
3/8/2011 v3.0beta (ra mắt tại Black Hat USA
2011)
Tạo User-Agent ngẫu nhiên để
tránh phát hiện
-o để chọn hệ điều hành nếu đã biết
-E tìm file do người dùng định
nghĩa
-r xuất kết quả quét vào file mong
muốn
3/2/2012 v3.0 (ra mắt tại BugCon Security
Conferences 2012)
-X áp dụng thuật toán Bisection
-M để chọn phương thức mong
muốn
-e thêm đuôi mở rộng vào cuối mỗi
chuỗi fuzz
2/8/2013 v3.0.1
Thay đổi HTTP module
-C để tiếp tục fuzzing
-S để thêm SSL cho chế độ http
Chế độ http-url hỗ trợ SSL
9/11/2016 v3.0.2
Sửa lỗi và cải thiện
Bảng 1. Lịch sử hình thành
21
Chương 2. Hướng dẫn cài đặt và sử dụng
2.1. Cài đặt DotDotPwn
Các nền tảng được hỗ trợ: Linux, Windows, OS X
Các phần mềm/mơi trường cần thiết:
• Perl
• Nmap (dùng cho tính năng phát hiện hệ điều hành)
Thực hiện lệnh tải DotDotPwn từ trang GitHub chính thức (Linux):
$ git clone />
Hoặc trên Kali Linux:
$ sudo apt install dotdotpwn
2.2. Sử dụng DotDotPwn
2.2.1. Khởi động và các tuỳ chọn
Tại thư mục chứa DotDotPwn, thực hiện lệnh sau để khởi động công cụ:
$ ./dotdotpwn.pl
Các tuỳ chọn:
Tuỳ
Nội dung
chọn
-m
Chọn chế độ (http, http-url, ftp, tftp, payload, stdout)
-h
Địa chỉ đích
-O
Phát hiện hệ điều hành
-o
Hệ điều hành nếu đã biết
-s
Phát hiện dịch vụ
22
-d
Độ sâu
-f
Tên file cho trước
-E
Thêm file
-S
Sử dụng SSL trong chế độ HTTP và Payload
-u
URL với phần cần tìm kiếm được đánh dấu bằng TRAVERSAL
-k
Từ khố cần tìm
-p
Tên file chứa payload cần gửi và phần cần dị tìm được đánh dấu bằng từ
khoá TRAVERSAL
-x
Cổng để kết nối
-t
Thời gian nghỉ giữa mỗi lần thử (mili giây)
-X
Sử dụng thuật tốn Bisection để tìm ra độ sâu chính xác
-e
Phần đi thêm vào cuối mỗi chuỗi dị tìm
-U
Tên đăng nhập
-P
Mật khẩu
-M
Phương thức dùng trong chế độ ‘http’
-r
Tên file báo cáo
-b
Ngắt sau khi tìm được lỗ hổng đầu tiên
-q
Chế độ im lặng
-C
Tiếp tục nếu như không nhận được dữ liệu từ máy chủ
Bảng 2. Danh sách tuỳ chọn
2.2.2. Chế độ HTTP
./dotdotpwn.pl -m http -h 192.168.1.1 -x 8080 -f /etc/hosts -k "localhost" -d 8 -t 200
-s
DotDotPwn sẽ gửi 5 yêu cầu 1 giây (-t) tới web server (-m) tại cổng 8080 (-x) và cài
đặt tại 192.168.1.1 (-h). Thêm vào đó, cơng cụ sẽ cố lấy về file /etc/hosts (-f) và để tránh
kết quả sai lệch, công cụ sẽ thực hiện kiểm tra phản hồi của server để tìm từ khố
“localhost”, nếu tồn tại thì coi như có lỗ hổng. Ngồi ra, để lấy thêm thơng tin, cơng cụ sẽ
23
lấy cả banner của web server. DotDotPwn sẽ lưu kết quả quét vào một file tên
192.168.1.1_<ngày>_<giờ> trong thư mục Reports.
./dotdotpwn.pl -m http -h 192.168.1.1 -O -X -M POST -e .php -E
DotDotPwn sẽ tiến hành phát hiện hệ điều hành đang chạy trên máy mục tiêu (-O)
và khi đã phát hiện được, cơng cụ sẽ dị tìm dựa trên hệ điều hành đó. Sau đó, tất cả các
yêu cầu HTTP sẽ được tiến hành theo phương thức đã định sẵn, ở đây là phương thức POST
thay vì GET (-M). Ở cuối mỗi u cầu dị tìm, cơng cụ sẽ gán thêm đi .php (-e). Tuỳ
chọn -E sẽ khiến cơng cụ tìm kiếm các file khác được định nghĩa trong TraversalEngine.pm
(mặc định là “config.inc.php” và “web.config”). Cuối cùng, công cụ sẽ áp dụng thuật toán
Bisection (-X) để phát hiện độ sâu của lỗ hổng, vậy nên nếu chúng ta tìm ra lỗ hổng, thuật
tốn này sẽ cố tìm ra độ sâu bằng số yêu cầu tối thiểu.
2.2.3. Chế độ HTTP URL
./dotdotpwn.pl -m http-url -u
http://192.168.1.1:10000/unauthenticated/TRAVERSAL -O -k "root:" -r webmin.txt
DotDotPwn sẽ cố phát hiện hệ điều hành chạy trên 192.168.1.1 (-O) và khi phát
hiện được, cơng cụ sẽ dị tìm dựa trên hệ điều hành đó. Sau đó, cơng cụ sẽ thay thế phần
TRAVERSAL nằm trong URL cho trước (-u) và gửi yêu cầu đến web server ở cổng 10000.
Cuối cùng, để tránh kết quả sai lệch, công cụ sẽ kiểm tra phản hồi của server một lần nữa
để tìm từ khố “root”, nếu tồn tại thì coi là có lỗ hổng. Nếu coi file nhận được là
/etc/password, khá chắc chắn rằng từ khoá “root” sẽ nằm ở đầu file. DotDotPwn sẽ lưu
kết quả quét vào file tên webmin.txt nằm trong thư mục Reports.
2.2.4. Chế độ FTP
./dotdotpwn.pl -m ftp -h 192.168.1.1 -s -U nitr0us -P n1tr0u5pwnzj00 -o windows q -r ftp_server.txt
Trước hết DotDotPwn sẽ cố nhận thông điệp biểu ngữ (-s) của FTP server (-m), sau
đó, nó sẽ cố đăng nhập bằng tên đăng nhập (-U) và mật khẩu (-P) cho trước trong trường
24
hợp server không cho phép truy cập ẩn danh. Sau khi được xác thực, cơng cụ sẽ cố tìm
những file thông dụng của hệ điều hành Windows (-o) và lưu vào thư mục “retrieved_file”.
Thêm vào đó, DotDotPwn sẽ khơng in ra chi tiết của các hành động, mà sẽ hoạt động im
lặng (-q) và sẽ chỉ in những dấu hiệu phát hiện được lỗ hổng. Công cụ sẽ lưu kết quả quét
vào vào file ftp_server.txt (-r) trong thư mục Reports.
2.2.5. Chế độ TFTP
./dotdotpwn.pl -m tftp -h 192.168.1.1 -b -t 1 -f windows/system32/drivers/etc/hosts
DotDotPwn sẽ gửi tín hiệu truy cập tới TFTP server (-m) tại địa chỉ 192.166.1.1 (h) mỗi 1 mili giây, nghĩa là nhanh nhất có thể. Sau đó, DotDotPwn sẽ hồn thành tìm kiếm
khi nó đã tìm được lỗ hổng đầu tiên (-b). Phần tìm kiếm sẽ nhắm vào các file nằm trong
windows/system32/drivers/etc/hosts (-f). DotDotPwn sẽ lưu kết quả quét vào file tên
192.168.1.1_<ngày>_<giờ> trong thư mục Reports.
2.2.6. Chế độ PAYLOAD
./dotdotpwn.pl -m payload -h 192.168.1.1 -x 10000 -p payload_sample_1.txt -k
"root:" -f /etc/passwd
Công cụ sẽ thay thế phần TRAVERSAL nằm trong file payload (-p) với đường dẫn
vừa tạo và sẽ gửi payload tìm kiếm cho TCP server (trong trường hợp này là Webmin) ở
cổng 10000 (-x) và có địa chỉ 192.168.1.1 (-h). Cuối cùng, DotDotPwn sẽ tìm từ khố
“root:” (-k) trong phản hồi của server, và nếu nó xuất hiện thì được coi là có lỗ hổng. Chỉ
định file cần nhận là /etc/passwd (-f), khá chắc chắn rằng từ khoá “root:” nằm ở đầu file.
DotDotPwn sẽ lưu kết quả quét trong file tên là 192.168.1.1_<ngày>_<giờ> trong thư
mục Reports.
2.2.7. Chế độ STDOUT
./dotdotpwn.pl -m stdout -d 5
25