1. Trang chủ
  2. » Giáo án - Bài giảng

BÁO CÁO BÀI TẬP LỚN MÔN: AN TOÀN MẠNG ĐỀ TÀI: Tìm hiểu về công cụ Wfuzz

77 45 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 77
Dung lượng 4,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

HỌ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 2

MỤ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 3

1.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 4

3.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 5

Chươ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 6

DANH 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 7

DANH 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 8

Hì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 9

Hì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 10

Hì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 11

DANH 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 12

LỜ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 13

I 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 15

II 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 16

Hì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 17

Chươ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 18

1.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 19

Hì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 20

Hì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 21

Hì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 22

Hì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 24

hay 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 25

Hì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 26

Hì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 28

Hì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 30

Hì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 31

2.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 32

Chú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 33

Hì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 34

Hì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 35

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

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 36

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 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 37

Hì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 38

Hì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

Ngày đăng: 09/02/2022, 16:22

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w