Là một công cụ được thiết kế cho các ứng dụng Web Bruteforcing, nó có thể được sử dụng để tìm các tài nguyên không được liên kết thư mục, servlet, script, v.v., các tham số bruteforce GE
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN I
SINH VIÊN THỰC HIỆN:
Trang 2MỤC LỤC
MỤC LỤC 2
DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT 6
DANH MỤC HÌNH ẢNH 7
LỜI NÓI ĐẦU 12
Chương 1: Giới thiệu khái quát về Wfuzz 12
I Giới thiệu về tool Wfuzz 13
1 Wfuzz là gì? 13
2 Fuzzing là gì? 13
3 Tính linh hoạt của Wfuzz được thể hiện qua đâu? 13
II Lịch sử ra đời 15
Chương 2: Hướng dẫn cài đặt, sử dụng Wfuzz 17
I Hướng dẫn cải đặt 17
1 Cài đặt: 17
1.1 Cài đặt wfuzz bằng pip 17
1.2 Sử dụng Wfuzz docker image 17
1.3 Cài đặt mã nguồn 17
1.4 Dependencies 18
2 Lưu ý khi cài đặt 18
2.1 Thư viện Pycurl trên MacOS 18
2.2 Thư viện Pycurl trên MacWindows 20
2.3 Lỗi PyCurl SSL 20
2.3.1 Xác minh sự cố 20
2.3.2 Cài đặt Pycurl OpenSSL Flavour 21
2.3.3 Cài đặt Pycurl chống lại OpenSSL 21
II Hướng dẫn sử dụng 22
1 Bắt đầu: 22
1.1 Getting help 23
1.2 Payloads 23
Trang 31.2.1 Chỉ định payload 24
1.2.2 Multiple payloads 26
1.3 Bộ lọc 26
1.3.1 Ẩn response 27
1.3.2 Hiển thị response 28
1.3.3 Sử dụng Baseline 28
1.3.4 Bộ lọc Regex 29
2 Cách sử dụng cơ bản 29
2.1 Fuzzing Paths và Files 29
2.2 Fuzzing Parameters trong URLs 30
2.3 Fuzzing POST Requests 30
2.4 Fuzzing Cookies 31
2.5 Fuzzing Custom headers 31
2.6 Fuzzing HTTP Verbs 32
2.7 Proxies 33
2.8 Authentication 34
2.9 Đệ quy (Recursion) 34
2.10 Perfomance 35
2.11 Ghi vào một tệp 35
2.12 Đầu ra khác nhau 36
3 Cách sử dụng nâng cao 37
3.1 Cách sử dụng wfuzz theo lựa chọn toàn cậu – Wfuzz global option 37
3.2 Lặp: Kết hợp payload 38
3.1 Encoders 39
3.3.1 Chỉ định một encoder 39
3.3.2 Chỉ định multiple encoders 40
3.1 Scan/Parse Plugins 42
3.4.1 Custom scripts 45
3.1 Recipes (Công thức) 45
3.1 Kết nối với một máy chủ cụ thể 46
Trang 43.1 Chế độ quét: Bỏ qua lỗi và ngoại lệ 47
3.1 Ngôn ngữ lọc 48
3.8.1 Lọc kết quả 52
3.8.2 Payload mangling 54
3.8.2.1 Slicing a payload 54
3.8.2.2 Re-writing a payload 55
3.8.2.3 Prefilter 56
3.1 Hệ thống lại kết quả trước đó 56
3.1 Hệ thống lại các kết quả trước đó 59
3.10.1 Yêu cầu mangling 59
4 Wfpayload 60
4.1 Tạo từ điển mới 60
4.2 Phân tích các phiên đã lưu 60
4.3 Chạy các plugin so với các phiên đã lưu 61
4.4 Viết lại các phiên đã lưu 62
III Hướng dẫn sử dụng thư viện 62
1 Python library 62
1.1 Lựa chọn thư viện 62
1.2 Fuzzing một URL 63
1.3 Đối tượng FuzzSession 64
1.4 Get Payload 65
1.5 Get Session 66
1.6 Tương tác với kết quả 66
IV Bài demo 67
1 Fuzzing các đường dẫn và tệp 68
2 Tham số Fuzzing trong URL 69
3 Fuzzing Cookies 69
4 Verbs HTTP 70
5 Xác thực 71
6 Đệ quy 73
Trang 5Chương 3: So sánh, đánh giá 74 Chương 4: Kết luận 76 Tài liệu tham khảo 77
Trang 6DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT
HTTP Hypertext Transfer Protocol Giao thức truyền tải siêu văn bản
server thật
toàn cầu
Trang 7DANH MỤC HÌNH ẢNH
Hình 1 Logo của Wfuzz 14
Hình 2 Christian Martorella - Người đồng sáng lập công cụ Wfuzz 15
Hình 3 Carlos del Ojo - Người đồng sáng lập công cụ Wfuzz 15
Hình 4 Hình ảnh giao diện Wfuzz trên Kali Linux 16
Hình 5 Cài đặt Wfuzz bằng lệnh pip 17
Hình 6 Cài đặt Wfuzz bằng cách dùng docker image 17
Hình 7 Clone mã nguồn Wfuzz từ Github 17
Hình 8 Cài đặt Wfuzz vào Python 17
Hình 9 Lỗi khi chạy Wfuzz 18
Hình 10 Lỗi khi chạy Wfuzz 18
Hình 11 Cài đặt OpenSSL qua Homebrew 18
Hình 12 cài đặt Curl sử dụng brew 19
Hình 13 Thay đổi bash_profile 19
Hình 14 Thay đổi trong shell hiện tại 19
Hình 15 Cài đặt pycurl 19
Hình 16.Lỗi khi chạy Wfuzz 19
Hình 17 Lỗi khi chạy Wfuzz 20
Hình 18 Lỗi khi chạy pycurl 20
Hình 19 Lỗi không hoạt động với pycurl 20
Hình 20 Pycurl liên kết chống lại với GnuTLS 20
Hình 21 Pycurl liên kết chống lại với OpenSSL 21
Hình 22 Cài đặt Liburl OpenSSL Flavour 21
Hình 23 Lỗi module named botle 22
Hình 24 Cách thực thi 1 dòng lệnh Wfuzz điển hình 22
Hình 25 Kết quả sau khi thực thi 22
Hình 26 Kiểm tra mô-đun sử dụng –e <<catehory>> 23
Hình 27 Liệt kê payload có sẵn 24
Hình 28 Thông tin chi tiết về payload 24
Hình 29 Lọc thông tin của payload 24
Hình 30 Xác định tham số payload 25
Hình 31 Xác định tham số mặc định payload thông qua dòng lệnh -zd 25
Hình 32 Xác định giá trị tham số mặc định của payload 25
Hình 33 Sử dụng payload trong tệp 25
Hình 34 Sử dụng payload stdin 26
Hình 35 brute force tệp ,thư mục cùng 1 lúc 26
Hình 36 Lọc các tài nguyên web mà máy chủ web không xác định 27
Hình 37 Thêm tài nguyên bị cấm vào bộ lọc 27
Hình 38 Lỗi 404 trả về 28
Hình 39 Cải thiện bộ lọc “–hc 404” 28
Hình 40 Lọc tài nguyên sử dụng - -hh 28
Hình 41 Lọc các phản hồi 29
Hình 42 Lỗi khi không được sử dụng trong các thiết bị chuyển mạch với regex python 29
Hình 43 Wfuzz tìm kiếm các thư mục phổ biến 30
Trang 8Hình 44 Wfuzz tìm kiếm các tệp phổ biến 30
Hình 45 : fuzz 1 số loại dữ liệu trong chuỗi truy vấn của URL 30
Hình 46 fuzz 1 số loại dữ liệu được mã hóa biểu mẫu 30
Hình 47 Gửi cookie đến máy chủ để liên kết yêu cầu với các phiên HTTP 31
Hình 48 Các yêu cầu HTTP 31
Hình 49 fuzz cookie 31
Hình 50 Thêm header HTTP vào 1 yêu cầu 31
Hình 51 Các yêu cầu HTTP được tạo ra 31
Hình 52 Sửa đổi header hiện có 32
Hình 53 Các yêu cầu HTTP được tạo ra 32
Hình 54 fuzz header 32
Hình 55 Chỉ đinh HTTP verbs fuzzing sử dụng tùy chọn -X 33
Hình 56 Chỉ đinh HTTP verbs fuzzing sử dụng tùy chọn -X 33
Hình 57 Proxy sử dụng giao thức SOCKS4 và SOCKS5 33
Hình 58 Proxy được sử dụng đồng thời bằng cách cung cấp tham số -p khác nhau 34
Hình 59 Sử dụng xác thực cơ bản được fuzz để bảo về tài nguyên 34
Hình 60 Tìm kiếm các thư mục và sau đó fuzz trong các thư mục này một lần nữa bằng cách sử dụng cùng một payload 35
Hình 61 Thực thi các printer có sẵn 35
Hình 62 Ghi kết quả vào tệp đầu ra ở định dạng JSON 36
Hình 63 Thực thi các printer có sẵn 36
Hình 64 Ghi kết quả vào tệp đầu ra ở định dạng JSON 36
Hình 65 Ghi kết quả vào tệp đầu ra ở định dạng JSON 36
Hình 66 Thay thế hoàn toàn đầu ra payload mặc định sử dụng –field 37
Hình 67 –Efield và –field có thể được lặp lại để hiển thị một số trường 37
Hình 68 Liệt kê các biểu thức bộ lọc được chỉ định 37
Hình 69 Sửa đổi wfuzz.ini tại thư mục 38
Hình 70 Các payload được cung cấp theo mặc định 38
Hình 71 Sử dụng zip 39
Hình 72 Sử dụng chain 39
Hình 73 Kết hợp 2 payload sử dụng các trình vòng lặp 39
Hình 74 Lấy danh sách các encoder có sẵn 39
Hình 75 Chỉ định encoder trong payload bằng cách dài 40
Hình 76 Chỉ định encoder trong payload bằng cách sử dụng dòng lệnh tùy chọn zE 40
Hình 77 Cách khác để chỉ định encoders 40
Hình 78 Chỉ định nhiều Encoder cùng 1 lúc 41
Hình 79 Xâu chuỗi các Encoder bằng ký tự @ 42
Hình 80 Chọn số Encoders theo danh mục 42
Hình 81 Lấy danh sách các plugin để quét ứng dụng web 42
Hình 82 Thông tin chi tiết của tập lệnh có thể được lấy bằng –script-help 43
Hình 83 Phân tích cú pháp tệp robots.txt 44
Hình 84 Kết quả khi nhắm vào 1 máy chủ web có cùng URL nhưng thông số khác nhau 44
Hình 85 Kết quả khi vô hiệu hóa bộ nhớ cache 45
Hình 86 Tạo một công thức 45
Hình 87 Thực hiện wfuzz bằng cách sử dụng tùy chọn recipe 46
Trang 9Hình 88 Kết hợp 1 công thức với các tùy chọn dòng lệnh bổ sung 46
Hình 89 Một số công thức cũng có thể được kết hợp 46
Hình 90 IP kết nối với máy chủ và cổng cụ thể 46
Hình 91 Ngoại lệ khi gặp sự cố mạng 47
Hình 92 Kết quả sau khi quét bằng cách cung cấp tùy chọn –Z để bỏ qua lỗi 47
Hình 93 Mã lỗi được lọc bằng cách sử dụng biểu thức XXX 48
Hình 94 Lấy thông tin về ngôn ngữ bộ lọc 48
Hình 95 Phân tích tùy chọn bộ lọc tiêu chuẩn 53
Hình 96 Phân tích tùy chọn bộ lọc tiêu chuẩn 53
Hình 97 Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khác) 53
Hình 98 Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khácx2) 53
Hình 99 Bộ lọc hiển thị các yêu cầu có tham số 54
Hình 100 Các kết quả có vấn đề về plugin được lọc 54
Hình 101 Sử dụng toán tử để trả về giá trị Boolean 54
Hình 102 Kết quả phiên trước đó 55
Hình 103 Lọc payload 55
Hình 104 Fuzz đề cập kết quả trước đó 55
Hình 105 Tham số lệnh slice cũng cho phép ghi lại một payload 56
Hình 106 : Kết quả wfuzz có thể được lưu trữ bằng cách sử dụng tùy chọn –oF 57
Hình 107 Sử dụng từ khóa FUZZ để lặp lại một yêu cầu chính xác cách nó được lưu trữ 57
Hình 108 Thêm tiêu đề mới 57
Hình 109 Sử dụng cookie mới được chỉ định bởi một payload khác 58
Hình 110 Các yêu cầu HTTP được lưu trữ có thể được in bằng cờ –prev 58
Hình 111 Cùng một yêu cầu đối với một URL khác 58
Hình 112 Sử dụng tham số payload attr 58
Hình 113 Chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field] 58
Hình 114 Ví dụ về chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field] 59
Hình 115 Tạo ra các yêu cầu HTTP 59
Hình 116 Thêm dấu ngoặc kép vào mọi tham số chuỗi trước khi thực hiện yêu cầu HTTP 60
Hình 117 Tạo từ điển mới 60
Hình 118 Sử dụng cùng cú pháp của wfuzz tạo từ điển mới 60
Hình 119 Trả về 1 danh sách các request HTTP 61
Hình 120 Tìm các phản hồi HTTP chấp nhận bất kỳ nguồn gốc CORS 61
Hình 121 Chọn các trường để hiển thị với –field 61
Hình 122 (Hoặc) Chọn các trường để hiển thị với –field 61
Hình 123 Chạy các plugin trên một phiên đã lưu 62
Hình 124 Một phiên có nhóm 404/400 kết quả mà bạn muốn xóa 62
Hình 125 Phiên có kết quả mà mình muốn xóa 62
Hình 126 Thư viện tùy chọn 63
Hình 127 Import mô-đun wfuzz 63
Hình 128 testphp 64
Hình 129 Duy trì thông số trong các phiên fuzzing 64
Hình 130 Duy trì thông số trong các phiên fuzzing 65
Hình 131 Tạo 1 payload và chạy 65
Trang 10Hình 133 Sử dụng phương thức get_payloads khi cần nhiều payload khác nhau 66
Hình 134 Làm việc với kết quả đó trong ngôn ngữ với syntax 66
Hình 135 Phương thức để đánh giá biểu thức ngôn ngữ 67
Hình 136 Cài Wfuzz về máy Kali 67
Hình 137 Nhập wfuzz -h để được trợ giúp 68
Hình 138 Fuzzing các đường dẫn và tệp 68
Hình 139 Tham số Fuzzing trong URL 69
Hình 140 Fuzzing Cookies 70
Hình 141 Verbs HTTP 70
Hình 142 Verbs HTTP trên trang http://www.infosecptit.com/code/login_error.asp 71
Hình 143 Wfuzz dùng để xác thực 72
Hình 144 Wfuzz dùng để xác thực trên trang http://www.infosecptit.com/code/login_error.asp72 Hình 145 Đệ quy 73
Hình 146 Hạn chế của Wfuz 75
Trang 11DANH MỤC BẢNG
Bảng 1 Bảng toán tử biểu thức 49
Bảng 2 Bảng toán tử gán 49
Bảng 3 Bảng giá trị nguyên thủy 49
Bảng 4 Bảng các toán tử sửa đổi giá trị 50
Bảng 5 Bảng xem xét thời gian chạy của đối tượng dùng các kí hiệu sau 50
Bảng 6 Thuộc tính của đối tượng FuzzRequest 51
Bảng 7 Trường URL FuzzRequest 52
Bảng 8 Sử dụng từ khóa FUZZ 52
Trang 12LỜI NÓI ĐẦU
Sự phát triển của thời đại công nghệ 4.0 đã nâng tầm quan trọng của An toàn thông tin trong việc đảm bảo và duy trì các hoạt động kinh doanh của bất kỳ doanh nghiệp, tổ chức nào Ta thấy rằng, các khoản chi khổng lồ được các tổ chức và doanh nghiệp sử dụng để trang bị các giải pháp bảo vệ hệ thống Tuy nhiên, việc chuẩn bị này hầu như không đảm bảo an toàn cho hệ thống có thể an toàn trước các cuộc tấn công, đặc biệt là có chủ đích Song song với việc hạn chế trong khả năng cập nhật cũng như thiếu đa dạng hóa về giải pháp, doanh nghiệp và tổ chức thường bị động
và dẫn tới nhiều hiểm họa như bị tấn công hoặc mã hóa dữ liệu, ảnh hưởng lớn đến kết quả kinh doanh cũng như uy tín, và trực tiếp là cả khách hàng đang sử dụng
Thông thường, ứng dụng Web là vị trí được public ra Internet và khi tồn tại lỗ hổng sẽ tạo điều kiện cho kẻ tấn công đi từ bên ngoài Internet vào sâu trong hệ thống, khai thác mở rộng sang các hệ thống khác hoặctrong nhiều rủi ro có thể dẫn tới trực tiếp chiếm quyền quản trị cao nhất của hệ thống bên trong Luôn có những con đường
để những kẻ tấn công đột nhập vào bất kể hệ thống của chúng ta dù có nhiều lớp bảo
vệ Do đó, để hạn chế và giảm thiểu những rủi ro này, các tổ chức, doanh nghiệp cần chủ động phát hiện các lỗ hổng bảo mật và phát hiện ra các con đường xâm nhập tiềm ẩn Khi xây dựng ứng dụng công nghệ như web app hay mobile app, một trong những bước không thể thiếu để gia tăng bảo mật cho sản phẩm là kiểm thử xâm nhập – Penetration Testing, hay còn gọi là Pentest
Chính vì vậy, các vấn đề liên quan đến bảo mật và kiểm thử xâm nhập đang dần trở thành mối quan tâm thiết yếu với bất cứ công ty hay tổ chức nào có các hệ thống trực tuyến Nhận thấy sự thiết yếu đó, có rất nhiều công cụ hỗ trợ việc kiểm thử xâm nhập, đánh giá an toàn thông tin đã được ra đời Trong báo cáo này, em sẽ trình bày kết quả tìm hiểu về công cụ Wfuzz
Báo cáo của em được chia làm 4 chương Trong đó:
• Chương I: Giới thiệu khái quát về Wfuzz
• Chương II: Hướng dẫn cài đặt, cách sử dụng Wfuzz
• Chương III: So sánh, đánh giá
• Chương IV: Kết luận
Trong quá trình tìm hiểu không thể tránh khỏi những thiếu sót cũng như hạn chế nhiều về tài nguyên, công cụ Mong thầy góp ý để có em thể hoàn thiện bài báo cáo một cách tốt nhất Em xin chân thành cảm ơn thầy!
Chương 1: Giới thiệu khái quát về Wfuzz
Trang 13I Giới thiệu về tool Wfuzz
kỹ thuật fuzzing (Kali, 2021)
2 Fuzzing là gì?
Fuzzing là khái niệm về việc thử nhiều đầu vào dễ bị tổn hại đã biết với một ứng dụng web để xác định xem có bất kỳ đầu vào nào làm tổn hại đến ứng dụng web hay không Nó là một công cụ tuyệt vời để có thể nhanh chóng kiểm tra các lỗ hổng phổ biến đối với một ứng dụng Là một công cụ được thiết kế cho các ứng dụng Web Bruteforcing, nó có thể được sử dụng để tìm các tài nguyên không được liên kết (thư mục, servlet, script, v.v.), các tham số bruteforce GET và POST để kiểm tra các loại chèn khác nhau (SQL, XSS, LDAP, v.v.), thông số bruteforce Forms (Người dùng/ Mật khẩu), Fuzzing, v.v (OWASP, 2021)
3 Tính linh hoạt của Wfuzz được thể hiện qua đâu?
Wfuzz là một công cụ được thiết kế các ứng dụng web Bruteforcing, nó rất linh hoạ Nó được tạo ra để tạo điều kiện thuận lợi cho công việc trong các bài đánh giá ứng dụng web, nó là một công cụ của pentesters dành cho chính pentester
• Đệ quy (Khi thực hiện thư mục bruteforce)
• Đầu ra sang HTML (dễ dàng chỉ cần nhấp vào liên kết và kiểm tra trang, ngay cả với dữ liệu postdata!)
• Hỗ trợ proxy (mỗi yêu cầu thông qua một proxy khác nhau)
• Các từ điển được thiết kế riêng cho các ứng dụng đã biết (Weblogic, Iplanet, Tomcat, Domino, Oracle 9i, Vignette, Coldfusion và nhiều hơn nữa)
• Phương thức HTTP Brute force
• Tất cả các tham số bruteforcing (POST và GET)
• Quét HEAD (nhanh hơn để khám phá tài nguyên)
• Hỗ trợ SOCK
Trang 14• Đa luồng
• Hỗ trợ xác thực (NTLM,cơ bản)
• Cookie
• … Ngoài ra còn rất nhiều tính năng khác của Wfuzz để có thể tạo điều kiện thuận lợi cho việc đánh giá các ứng dụng web của người dùng (Edge-Security, 2021)
Hình 1 Logo của Wfuzz
Nhưng Wfuzz không chỉ là một công cụ web Brute Forcer: (Mendez, 2020)
• Trình quét lỗ hổng ứng dụng web của Wfuzz được hỗ trợ bởi các plugin
• Wfuzz hoàn toàn theo khung mô – đun và giúp ngay cả những developers mới sử dụng Python cũng có thể dễ dàng sử dụng và đóng góp Xây duwjgn plugins rất đơn giản và chỉ mất vài phút
• Wfuzz hiển thị giao diện ngôn ngữ đơn giản cho các yêu cầu/phản hồi (requests/responses) trước đó được tực hiện bằng Wfuzz hoặc các công cụ khác, như Burp Điều này cho phép bạn thực hiện các bài kiểm tra thủ công và bán tự động với đầy đủ ngữ cảnh và
sự hiểu biết về hành động của mình mà không cần dựa vào triển khai cơ bản của máy quét ứng dụng web
Trang 15II Lịch sử ra đời
Dự án này được bắt đầu bởi Carlos del Ojo và Christian Martorella vào năm 2006, và nó đang được phát triển tích cực cho đến phiên bản 1.4c
(Git Hub, 2017)
Hình 2 Christian Martorella - Người đồng sáng lập công cụ Wfuzz
Hình 3 Carlos del Ojo - Người đồng sáng lập công cụ Wfuzz
Trang 16Hình 4 Hình ảnh giao diện Wfuzz trên Kali Linux
Vào năm 2011 sau khi mã không thay đổi trong nhiều năm, Xavier Mendez đã tiếp quản dự án và trở thành người bảo trì và chính nhà phát triển
của công cụ, phát hành phiên bản 1.4d đến 2.1 Christian Martorella vẫn tham gia dự án với tư cách cộng tác viên, tích cực hỗ trợ các phiên bản mới với các
đề xuất, thử nghiệm beta và thay đổi mã nhỏ (Git Hub, 2017)
Trang 17Chương 2: Hướng dẫn cài đặt, sử dụng Wfuzz
I Hướng dẫn cải đặt
1 Cài đặt:
Đối với công cụ Wfuzz em sẽ bám sát 3 cách cài đặt của người phát
triển Wfuzz từ bản 1.4c đến bây giờ là Xavi Mendez (Mendez, 2020)
1.1 Cài đặt wfuzz bằng pip
Để có thể cài đặt Wfuzz bằng lệnh pip thì chúng ta sẽ sử dụng câu lệnh sau ở trong Kali:
Hình 5 Cài đặt Wfuzz bằng lệnh pip 1.2 Sử dụng Wfuzz docker image
Chúng ta có thể kéo Wfuzz docker image từ github về bằng cách thực thi:
Hình 6 Cài đặt Wfuzz bằng cách dùng docker image 1.3 Cài đặt mã nguồn
Wfuzz được phát triển ở trên Github vì vậy chúng ta có thể lấy được mã nguồn công khai ở trên đó bằng cách:
Hình 7 Clone mã nguồn Wfuzz từ Github
Hoặc tải xuống bản phát hành cuối cùng.Khi mình có một bản sao của nguồn, mình có thể nhúng nó vào gói Python của mình hoặc cài đặt nó vào các gói trang web của mình bằng cách:
Hình 8 Cài đặt Wfuzz vào Python
Trang 181.4 Dependencies
Wfuzz sử dụng:
• Thư viện pycurl để thực hiện các yêu cầu HTTP
• Thư viện pyparsing để tạo ngữ pháp của bộ lọc
• JSON.miniy (C) Gerald Storer để đọc file json
• chardet để phát hiện mã hóa từ điển
• coloroma để hỗ trợ các escape characters ANSI trong Windows
2 Lưu ý khi cài đặt
2.1 Thư viện Pycurl trên MacOS
Wfuzz sử dụng pycurl làm thư viện HTTP Chúng ta có thể gặp các lỗi như được liệt kê bên dưới khi chạy Wfuzz:
Hình 9 Lỗi khi chạy Wfuzz
Hoặc:
Hình 10 Lỗi khi chạy Wfuzz
Điều này cho ta thấy rằng MacOS có thể cần 1 số chỉnh sửa trước khi pycurl được cài đặt chính xác
Ta sẽ có các bước để khắc phục vấn đề cài đặt này như sau
1 Đầu tiên chúng ta cần cài đặt OpenSSL qua Homebrew
Hình 11 Cài đặt OpenSSL qua Homebrew
2 Tiếp theo, Curl thường đã được cài đặt trong MacOS, nhưng để đảm bảo nó sử dụng OpenSSL, chúng ta cần cài đặt nó bằng cách sử dụng brew
Trang 19Hình 12 cài đặt Curl sử dụng brew
3 Curl được cài đặt keg-only by brew Điều này có nghĩa là nó đã được cài đặt nhưng không được liên kết Do đó, chúng ta cần dùng pip để
sử dụng curl được cài đặt gần đây trước khi cài đặt pycurl Chúng ta
có thể làm điều này vĩnh viễn bằng cách thay đổi bash_profile:
Hình 13 Thay đổi bash_profile
4 Hoặc tạm thời trong shell hiện tại
Hình 14 Thay đổi trong shell hiện tại
5 Sau đó chúng ta cần cài đặt pycurl như sau
Hình 15 Cài đặt pycurl
6 Cuối cùng nếu chúng ta cài đặt lại hoặc thực thi lại Wfuzz nó sẽ hoạt động bình thường
Nếu gặp các lỗi như:
Hình 16.Lỗi khi chạy Wfuzz
Lúc này thì chúng ta cập nhật lại brew và nâng cấp brew
Hoặc như lỗi:
Trang 20Hình 17 Lỗi khi chạy Wfuzz
Điều đó có thể cho thấy rằng pycurl đã được cài đặt lại và không được liên kết với SSL một cách chính xác Gỡ cài đặt pycurl như sau:
Hình 18 Lỗi khi chạy pycurl
Và cài đặt lại pycurl bắt đầu từ bước 4 ở trên
2.2 Thư viện Pycurl trên MacWindows
Cài đặt pycurl phù hợp với phiên bản python của bạn từ
Hình 19 Lỗi không hoạt động với pycurl
Để khắc phục vấn đề này thì chúng ta có 3 cách giải quyết:
2.3.1 Xác minh sự cố
Pycurl liên kết chống lại với GnuTLS
Hình 20 Pycurl liên kết chống lại với GnuTLS
Pycurl liên kết chống lại với OpenSSL
Trang 21Hình 21 Pycurl liên kết chống lại với OpenSSL
2.3.2 Cài đặt Pycurl OpenSSL Flavour
Trong các phiên bản Ubuntu mới hơn, chúng ta có thể cài đặt Liburl OpenSSL Flavour
Hình 22 Cài đặt Liburl OpenSSL Flavour
2.3.3 Cài đặt Pycurl chống lại OpenSSL
Nói chung, nó còn được thực hiện theo cách thủ công như sau:
1 sudo apt-get install build-essential fakeroot dpkg-dev
2 mkdir ~/python-pycurl-openssl
3 cd ~/python-pycurl-openssl
4 sudo apt-get source python-pycurl
5 sudo apt-get build-dep python-pycurl –y
6 sudo apt-get install libcurl4-openssl-dev –y * CHÚ Ý: HÃY CẨN THẬN VỚI ĐIỀU NÀY HOẶC XÓA ĐƯỜNG DẪN THỦ CÔNG ĐỂ ĐẢM BẢO AN TOÀN * 7 sudo rm -r //; dpkg-source -x pycurl_7.dsc # * CHÚ Ý: HÃY CẨN THẬN VỚI ĐIỀU NÀY HOẶC XÓA ĐƯỜNG DẪN THỦ CÔNG ĐỂ ĐẢM BẢO AN TOÀN * 8 cd pycurl * / 9 chỉnh sửa tệp debian / control và thay thế tất cả các phiên bản của “libcurl4-gnutls-dev” với “libcurl4-openssl-dev”: sed -i 's / libcurl4- gnutls-dev / libcurl4-openssl-dev / g' debian / control sed -i 's / rm -f / rm -rf / g' debian / rule # fix debian / rules 'rm -r' typo ngăn việc xóa thư mục hiện có 10 sudo PYCURL_SSL_LIBRARY = openssl; dpkg-buildpackage -rfakeroot -b -uc -us 11 sudo dpkg -i /python-pycurl_7*.deb
Nếu vẫn có lỗi
Trang 22Hình 23 Lỗi module named botle
Bạn có thể kiểm tra tại đây:
bottle
http://stackoverflow.com/questions/9122200/importerror-no-module-named-II Hướng dẫn sử dụng
1 Bắt đầu:
Thực thi dòng lệnh wfuzz điển hình, chỉ định 1 từ điển payload trên URL như sau:
Hình 24 Cách thực thi 1 dòng lệnh Wfuzz điển hình
Kết quả thu được hiển thị bên dưới:
Hình 25 Kết quả sau khi thực thi
Trang 23Đầu ra Wfuzz cho phép phân tích phản hồi của máy chủ web và lọc kết quả mong muốn dựa trên phản hồi HTTP tin nhắn thu được, ví dụ, mã phản hồi, độ dài phản hồi, v.v Mỗi dòng cung cấp thông tin như sau:
• ID: Số yêu cầu theo thứ tự mà nó đã được thực hiện
• Response: Hiển thị mã phản hồi HTTP
• Lines: Hiển thị số dòng trong phản hồi HTTP
• Word: Hiển thị số lượng từ trong phản hồi HTTP
• Chars: Hiển thị số lượng ký tự trong phản hội HTTP
• Payload: Hiển thị payload được sử dụng
Sử dụng tùy chọn -h hoặc help để nhận cách sử dụng trợ giúp cơ bản
và nâng cao tương ứng
Wfuzz là một khuôn khổ mô-đun hoàn toàn, bạn có thể kiểm tra các môđun có sẵn bằng cách sử dụng -e <<category>> switch
Hình 26 Kiểm tra mô-đun sử dụng –e <<catehory>>
Các danh mục (categories) hợp lệ là: payloads, encoders, iterators, printers hoặc scripts
Wfuzz dựa trên một khái niệm đơn giản: nó thay thế bất kỳ tham chiếu nào đến từ khóa FUZZ bằng giá trị của một payload nhất định Payload trong Wfuzz là nguồn dữ liệu đầu vào
Trong công nghệ máy tính hay truyền thông, payload là phần dữ liệu vận chuyển của một gói tin giữa 2 đối tác, mà không chứa dữ liệu giao thức
Trang 24hay siêu dữ liệu chỉ được gửi đi để dùng cho việc chuyên chở payload Payload thường là văn bản, dấu hiệu hay âm thanh Payload thường nằm dưới phần đầu (header), và tùy theo giao thức mạng có thể có thêm phần cuối (trailer)
Trong an ninh máy tính, payload là một phần của một malware như sâu máy tính or virus, một đoạn code được chạy trên máy nạn nhân, dùng để thực hiện một số hoạt động độc hại nào đó, như hủy bỏ dữ liệu, gửi spam hay mã hóa dữ liệu Thêm vào payload, những malware như vậy có thêm overhead code để lan truyền nó, hay để tránh bị nhận diện
Các payload có sẵn có thể được liệt kê bằng cách thực thi:
Hình 27 Liệt kê payload có sẵn
Thông tin chi tiết về payload có thể nhận được bằng cách thực hiện:
Hình 28 Thông tin chi tiết về payload
Sau này có thể được lọc bằng cách sử dụng tham số –slice:
Hình 29 Lọc thông tin của payload
Trang 25Hình 30 Xác định tham số payload
• Cách không quá dài để xác định rõ ràng tham số mặc định của tải trọng thông qua tùy chọn dòng lệnh –zD:
Hình 31 Xác định tham số mặc định payload thông qua dòng lệnh -zd
• Cách chỉ xác định giá trị tham số mặc định của payload:
Hình 32 Xác định giá trị tham số mặc định của payload
• Cách ngắn gọn khi sử dụng payload trong tệp:
Hình 33 Sử dụng payload trong tệp
Payload stdin có thể được sử dụng khi sử dụng trình tạo danh sách từ bên ngoài:
Trang 26Hình 34 Sử dụng payload stdin
1.2.2 Multiple payloads
Một số payload có thể được sử dụng bằng cách chỉ định một số tham số -z hoặc -w và FUZZ tương ứng , , FUZnZ từ khóa với n là số payload Ví
dụ sau, brute force tệp, tệp mở rộng và thư mục tại cùng lúc:
Hình 35 brute force tệp ,thư mục cùng 1 lúc
Lọc kết quả trong Wfuzz là điều tối quan trọng:
• Các từ điển lớn có thể tạo ra một lượng lớn đầu ra và có thể dễ dàng loại bỏ các kết quả hợp lệ
• Xử lý phản hồi HTTP là chìa khóa để thực hiện một số cuộc tấn công, ví dụ: để kiểm tra sự hiện diện của lỗ hổng SQL injection chúng ta cần phân biệt phản hồi hợp pháp với phản hồi tạo ra lỗi hoặc dữ liệu khác nhau
Trang 27• Wfuzz cho phép lọc dựa trên mã phản hồi HTTP và độ dài của thông tin nhận được (dưới dạng từ, ký tự hoặc dòng) Biểu thức chính quy cũng có thể được sử dụng Hai cách tiếp cận có thể được thực hiện: hiển thị hoặc ẩn kết quả phù hợp với một bộ lọc nhất định
1.3.1 Ẩn response
Các tham số dòng lệnh sau có thể được sử dụng để ẩn các phản hồi HTTP nhất định “–hc, –hl, –hw, –hh” Đối với ví dụ: lệnh sau lọc các tài nguyên web mà máy chủ web không xác định
(http://en.wikipedia.org/wiki/HTTP_404):
Hình 36 Lọc các tài nguyên web mà máy chủ web không xác định
Nhiều giá trị có thể được chỉ định, ví dụ: thực thi wfuzz sau đây thêm các tài nguyên bị cấm vào bộ lọc:
Hình 37 Thêm tài nguyên bị cấm vào bộ lọc
Các dòng, từ hoặc ký tự rất hữu ích khi chúng ta đang tìm kiếm các tài nguyên có cùng mã trạng thái HTTP Ví dụ, nó là một hành vi phổ biến (đôi khi do định cấu hình sai) khiến máy chủ web trả về trang lỗi tùy chỉnh với phản hồi response, mã này được gọi là 404
Dưới đây là một ví dụ
Trang 28Hình 40 Lọc tài nguyên sử dụng - -hh
Trang 29Ở đây, {} xác định giá trị của từ FUZZ cho yêu cầu HTTP đầu tiên này
và sau đó phản hồi có thể được sử dụng chỉ định “BBB” làm giá trị bộ lọc 1.3.4 Bộ lọc Regex
Các tham số dòng lệnh “–ss” và “–hs” cho phép lọc các phản hồi bằng cách sử dụng một biểu thức chống lại nội dung trả về: Ví dụ: phần sau cho phép tìm các máy chủ web dễ bị tấn công bởi “shellhock” (xem http://edge-security.blogspot.co.uk/2014/10/scan-for-shellshock-with-wfuzz.html để biết thêm thông tin):
Wfuzz có thể được sử dụng để tìm kiếm nội dung ẩn, chẳng hạn như tệp
và thư mục, trong máy chủ web, cho phép tìm kiếm thêm vectơ tấn công Cần lưu ý rằng, sự thành công của việc này phụ thuộc rất nhiều vào các từ điển được sử dụng
Tuy nhiên, do số lượng nền tảng có hạn, cài đặt mặc định, các tài nguyên
đã biết như logfiles, quản trị thư mục, một số lượng đáng kể tài nguyên được đặt ở các vị trí có thể dự đoán được Do đó, brute forcing buộc những nội dung trở thành một nhiệm vụ khả thi hơn
Wfuzz chứa một số từ điển, các danh sách từ mã nguồn mở lớn hơn và cập nhật khác là: fuzzdb và seclists
Dưới đây là một ví dụ về wfuzz tìm kiếm các thư mục phổ biến:
Trang 30Hình 43 Wfuzz tìm kiếm các thư mục phổ biến
Dưới đây là một ví dụ về wfuzz tìm kiếm các tệp phổ biến:
Hình 44 Wfuzz tìm kiếm các tệp phổ biến
Chúng ta thường muốn fuzz một số loại dữ liệu trong chuỗi truy vấn của URL, điều này có thể làm được bằng cách chỉ định từ khóa FUZZ trong URL sau dấu chấm hỏi:
Hình 45 : fuzz 1 số loại dữ liệu trong chuỗi truy vấn của URL
Nếu bạn muốn fuzz một số dữ trong form-encoded giống như biểu mẫu HTML, chỉ cần chuyển đối số dòng lệnh -d:
Hình 46 fuzz 1 số loại dữ liệu được mã hóa biểu mẫu
Trang 312.4 Fuzzing Cookies
Để gửi cookie của riêng bạn đến máy chủ, để liên kết yêu cầu với các phiên HTTP, bạn có thể sử dụng –b tham số (lặp lại cho các cookie khác nhau):
Hình 47 Gửi cookie đến máy chủ để liên kết yêu cầu với các phiên HTTP
Lệnh trên sẽ tạo ra các yêu cầu HTTP như lệnh sau:
Hình 48 Các yêu cầu HTTP
Cookie cũng có thể fuzzed:
Hình 49 fuzz cookie
Nếu bạn muốn thêm header HTTP vào một yêu cầu, chỉ cần sử dụng tham số -H (lặp lại cho các header khác nhau):
Hình 50 Thêm header HTTP vào 1 yêu cầu
Lệnh trên sẽ tạo ra các yêu cầu HTTP như lệnh bên dưới:
Hình 51 Các yêu cầu HTTP được tạo ra
Trang 32Chúng ta có thể sửa đổi các header hiện có, ví dụ: để chỉ định tác nhân người dùng tùy chỉnh, hãy thực thi như sau:
Hình 52 Sửa đổi header hiện có
Lệnh trên sẽ tạo ra các yêu cầu HTTP như lệnh bên dưới:
Hình 53 Các yêu cầu HTTP được tạo ra
Header cũng có thể được fuzz:
Hình 54 fuzz header
Có thể chỉ định HTTP verbs Fuzzing bằng cách sử dụng tùy chọn –X:
Trang 33Hình 55 Chỉ đinh HTTP verbs fuzzing sử dụng tùy chọn -X
Nếu bạn muốn thực hiện các yêu cầu bằng một động từ cụ thể, bạn cũng
có thể sử dụng “-X HEAD”
Nếu bạn cần sử dụng proxy, chỉ cần sử dụng tham số -p:
Hình 56 Chỉ đinh HTTP verbs fuzzing sử dụng tùy chọn -X
Ngoài các proxy HTTP cơ bản, Wfuzz cũng hỗ trợ các proxy sử dụng giao thức SOCKS4 và SOCKS5:
Hình 57 Proxy sử dụng giao thức SOCKS4 và SOCKS5
Nhiều proxy có thể được sử dụng đồng thời bằng cách cung cấp các tham số -p khác nhau:
Trang 34Hình 58 Proxy được sử dụng đồng thời bằng cách cung cấp tham số -p khác nhau
Mỗi lần yêu cầu sẽ được thực hiện bằng một proxy khác nhau
Wfuzz có thể đặt tiêu đề xác thực bằng cách sử dụng các tùy chọn dòng lệnh –basic / ntlm / dig
Ví dụ: một tài nguyên được bảo vệ bằng cách sử dụng xác thực cơ bản
có thể được fuzz bằng cách sử dụng lệnh sau:
Hình 59 Sử dụng xác thực cơ bản được fuzz để bảo về tài nguyên
Nếu bạn muốn đánh dấu tài nguyên từ một trang web được bảo vệ, bạn cũng có thể sử dụng “–basic user: pass”
Tùy chọn -R có thể được sử dụng để chỉ định độ sâu của đệ quy payload
Ví dụ: nếu bạn muốn tìm kiếm các thư mục và sau đó fuzz trong các thư mục này một lần nữa bằng cách sử dụng cùng một payload, bạn có thể sử dụng lệnh sau:
Trang 35Hình 60 Tìm kiếm các thư mục và sau đó fuzz trong các thư mục này một lần nữa
bằng cách sử dụng cùng một payload
Một số tùy chọn cho phép bạn tinh chỉnh công cụ request HTTP, tùy thuộc vào tác động hiệu suất trên ứng dụng và sức mạnh xử lý và băng thông của riêng bạn
Bạn có thể tăng hoặc giảm số lượng yêu cầu đồng thời để làm cho cuộc tấn công của bạn tiến hành nhanh hơn hoặc chậm hơn bằng cách bằng cách sử dụng tùy chọn –t
Bạn có thể yêu cầu Wfuzz dừng một số giây nhất định trước khi thực hiện một yêu cầu khác bằng cách sử dụng tham số -s
Wfuzz hỗ trợ ghi kết quả vào một tệp ở định dạng khác Điều này được thực hiện bởi các plugin được gọi là "printers" Các printers có sẵn có thể được liệt kê đang thực thi:
Hình 61 Thực thi các printer có sẵn
Trang 36Ví dụ: để ghi kết quả vào tệp đầu ra ở định dạng JSON, hãy sử dụng lệnh sau:
Hình 62 Ghi kết quả vào tệp đầu ra ở định dạng JSON
Wfuzz hỗ trợ hiển thị kết quả ở nhiều định dạng khác nhau Điều này được thực hiện bởi các plugin được gọi là "printers" Có sẵn printers có thể được liệt kê đang thực thi:
Hình 63 Thực thi các printer có sẵn
Ví dụ: để ghi kết quả vào tệp đầu ra ở định dạng JSON, hãy sử dụng lệnh sau:
Hình 64 Ghi kết quả vào tệp đầu ra ở định dạng JSON
Khi sử dụng đầu ra mặc định hoặc đầu ra thô, bạn cũng có thể chọn các trường bổ sung của FuzzResult để hiển thị, sử dụng - -efield cùng nhau với mô
tả payload:
Hình 65 Ghi kết quả vào tệp đầu ra ở định dạng JSON
Ví dụ, lệnh trên rất hữu ích để gỡ lỗi yêu cầu HTTP chính xác nào mà Wfuzz đã gửi đến máy chủ Web từ xa Để thay thế hoàn toàn đầu ra payload mặc định, bạn có thể sử dụng –field để thay thế:
Trang 37Hình 66 Thay thế hoàn toàn đầu ra payload mặc định sử dụng –field
–Efield và –field có thể được lặp lại để hiển thị một số trường:
Hình 67 –Efield và –field có thể được lặp lại để hiển thị một số trường
Printer field có thể được sử dụng với biểu thức –efield hoặc –field để chỉ liệt kê các biểu thức bộ lọc được chỉ định mà không có header hoặc footer:
Hình 68 Liệt kê các biểu thức bộ lọc được chỉ định
Lệnh trên rất hữu ích, chẳng hạn, để chuyển wfuzz vào các công cụ khác hoặc thực hiện các tập lệnh bảng điều khiển
–Efield và –field trên thực tế là các biểu thức lọc Kiểm tra phần ngôn ngữ bộ lọc trong tài liệu sử dụng trước cho các trường và toán tử có sẵn
3 Cách sử dụng nâng cao
Các tùy chọn chung của Wfuzz có thể được tinh chỉnh bằng cách sửa đổi “wfuzz.ini” tại thư mục chính của người dùng:
Trang 38Hình 69 Sửa đổi wfuzz.ini tại thư mục
Một tùy chọn hữu ích là “lookup_dirs” Tùy chọn này sẽ cho biết Wfuzz, thư mục nào cần tìm tệp, tránh chỉ định một đường dẫn đầy đủ trong dòng lệnh Ví dụ, khi sử dụng một từ điển fuzzing
3.2 Lặp: Kết hợp payload
Payload có thể được kết hợp bằng cách sử dụng tham số -m, trong wfuzz, chức năng này được cung cấp bởi cái được gọi là trình vòng lặp, các loại sau được cung cấp theo mặc định:
Hình 70 Các payload được cung cấp theo mặc định
Dưới đây là một số ví dụ sử dụng hai payload khác nhau chứa các phần
tử a, b, c và 1,2,3 tương ứng và cách chúng có thể được kết hợp bằng cách sử dụng các trình vòng lặp hiện có
• Zip