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

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

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

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA CƠNG NGHỆ THƠNG TIN I
-----□□&□□-----

BÁO CÁO BÀI TẬP LỚN
MƠN: AN TỒN MẠNG
ĐỀ TÀI: Tìm hiểu về cơng cụ Wfuzz
Nhóm lớp: 01.
GIẢNG VIÊN:

TS. Đặng Minh Tuấn

SINH VIÊN THỰC HIỆN:
Họ và tên

Nguyễn Thu Trang

Mã sinh viên

B18DCAT245

Lớp sinh viên

D18CQAT01 - B

1


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
Hướng dẫn cải đặt .................................................................................................. 17

I.

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

II.

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


Hướng dẫn sử dụng............................................................................................. 22

1. Bắt đầu: ................................................................................................................ 22
1.1.

Getting help .................................................................................................... 23

1.2.

Payloads ......................................................................................................... 23
2


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
3


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

III.

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

Hướng dẫn sử dụng thư viện ............................................................................. 62

1. Python library ..................................................................................................... 62

IV.


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

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
4


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

5


DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT
Từ viết tắt
HTML
HTTP
JSON
CLI
CSRF

Thuật ngữ tiếng Anh/ Gải thích
Wfuzz
Hypertext Markup Language
Hypertext Transfer Protocol
JavaScript Object Notation
Command Line Interface
Cross-site Request Forgery
Encode


Thuật ngữ tiếng Việt/ Giải thích
Tiện tích dịng lệnh trong Kali
Ngơn ngữ Đánh dấu Siêu văn bản
Giao thức truyền tải siêu văn bản
Kiểu dữ liệu mở trong java
Giao diện dịng lệnh
Kỹ thuật tấn cơng giả mạo
Bộ mã hóa

GET

Phương thức gửi dữ liệu thơng qua
đường dẫn URL
Một đoạn mã được chạy trên máy
nạn nhân để thực hiện hành vi độc
hại
Thành phần mở rộng
Truyền thông tin qua HTTP header
Phương tiện trung gian kết nối các
server thật
Thư viện trong python
Mẫu
Yêu cầu gửi từ client lên server
Dữ liệu Server gửi về client
Rà quét
Xác định
Ngôn ngữ truy vấn dữ liệu
Là tiêu chuẩn an ninh cơng nghệ
tồn cầu
Địa chỉ Web


Payload

Plugin
POST
Proxy

SQL
SSL

Pycurl
Regex
Request
Response
Scan
Specifying
Structured Query Language
Secure Sockets Layer

URL

Uniform Resource Locator

6


DANH MỤC HÌNH ẢNH
Hình
Hình
Hình

Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình

Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình

1. Logo của Wfuzz............................................................................................................... 14
2. Christian Martorella - Người đồng sáng lập công cụ Wfuzz........................................... 15
3. Carlos del Ojo - Người đồng sáng lập công cụ Wfuzz .................................................... 15
4. Hình ảnh giao diện Wfuzz trên Kali Linux ..................................................................... 16
5. Cài đặt Wfuzz bằng lệnh pip ........................................................................................... 17
6. Cài đặt Wfuzz bằng cách dùng docker image ................................................................. 17
7. Clone mã nguồn Wfuzz từ Github ................................................................................... 17
8. Cài đặt Wfuzz vào Python ............................................................................................... 17
9. Lỗi khi chạy Wfuzz ......................................................................................................... 18
10. Lỗi khi chạy Wfuzz ....................................................................................................... 18
11. Cài đặt OpenSSL qua Homebrew .................................................................................. 18
12. cài đặt Curl sử dụng brew .............................................................................................. 19
13. Thay đổi bash_profile ................................................................................................... 19
14. Thay đổi trong shell hiện tại .......................................................................................... 19
15. Cài đặt pycurl ................................................................................................................ 19
16.Lỗi khi chạy Wfuzz ........................................................................................................ 19
17. Lỗi khi chạy Wfuzz ....................................................................................................... 20
18. Lỗi khi chạy pycurl ........................................................................................................ 20
19. Lỗi không hoạt động với pycurl .................................................................................... 20

20. Pycurl liên kết chống lại với GnuTLS ........................................................................... 20
21. Pycurl liên kết chống lại với OpenSSL ......................................................................... 21
22. Cài đặt Liburl OpenSSL Flavour ................................................................................... 21
23. Lỗi module named botle ................................................................................................ 22
24. Cách thực thi 1 dịng lệnh Wfuzz điển hình .................................................................. 22
25. Kết quả sau khi thực thi ................................................................................................. 22
26. Kiểm tra mô-đun sử dụng –e <<catehory>> ................................................................. 23
27. Liệt kê payload có sẵn ................................................................................................... 24
28. Thông tin chi tiết về payload ......................................................................................... 24
29. Lọc thông tin của payload ............................................................................................. 24
30. Xác định tham số payload ............................................................................................. 25
31. Xác định tham số mặc định payload thơng qua dịng lệnh -zd ...................................... 25
32. Xác định giá trị tham số mặc định của payload ............................................................. 25
33. Sử dụng payload trong tệp ............................................................................................. 25
34. Sử dụng payload stdin ................................................................................................... 26
35. brute force tệp ,thư mục cùng 1 lúc ............................................................................... 26
36. Lọc các tài nguyên web mà máy chủ web không xác định ........................................... 27
37. Thêm tài nguyên bị cấm vào bộ lọc ............................................................................... 27
38. Lỗi 404 trả về................................................................................................................. 28
39. Cải thiện bộ lọc “–hc 404” ............................................................................................ 28
40. Lọc tài nguyên sử dụng - -hh ......................................................................................... 28
41. Lọc các phản hồi ............................................................................................................ 29
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
43. Wfuzz tìm kiếm các thư mục phổ biến .......................................................................... 30
7


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 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ế hồn tồ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
8


Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình

Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
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
89. Một số cơng thức cũng có thể được kết hợp.................................................................. 46
90. IP kết nối với máy chủ và cổng cụ thể .......................................................................... 46
91. Ngoại lệ khi gặp sự cố mạng ........................................................................................ 47
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
93. Mã lỗi được lọc bằng cách sử dụng biểu thức XXX ..................................................... 48
94. Lấy thông tin về ngơn ngữ bộ lọc .................................................................................. 48
95. Phân tích tùy chọn bộ lọc tiêu chuẩn ............................................................................. 53
96. Phân tích tùy chọn bộ lọc tiêu chuẩn ............................................................................. 53
97. Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khác)......................................................... 53
98. Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khácx2)..................................................... 53
99. Bộ lọc hiển thị các yêu cầu có tham số ......................................................................... 54
100. Các kết quả có vấn đề về plugin được lọc .................................................................. 54
101. Sử dụng toán tử để trả về giá trị Boolean ................................................................... 54
102. Kết quả phiên trước đó ................................................................................................ 55
103. Lọc payload ................................................................................................................. 55
104. Fuzz đề cập kết quả trước đó ....................................................................................... 55
105. Tham số lệnh slice cũng cho phép ghi lại một payload ............................................... 56
106. : Kết quả wfuzz có thể được lưu trữ bằng cách sử dụng tùy chọn –oF ....................... 57
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
108. Thêm tiêu đề mới ......................................................................................................... 57
109. Sử dụng cookie mới được chỉ định bởi một payload khác .......................................... 58
110. Các yêu cầu HTTP được lưu trữ có thể được in bằng cờ –prev .................................. 58
111. Cùng một yêu cầu đối với một URL khác ................................................................... 58
112. Sử dụng tham số payload attr ...................................................................................... 58
113. Chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field] ............................. 58
114. Ví dụ về chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field] ............... 59
115. Tạo ra các yêu cầu HTTP ............................................................................................ 59
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

117. Tạo từ điển mới ........................................................................................................... 60
118. Sử dụng cùng cú pháp của wfuzz tạo từ điển mới ....................................................... 60
119. Trả về 1 danh sách các request HTTP ......................................................................... 61
120. Tìm các phản hồi HTTP chấp nhận bất kỳ nguồn gốc CORS ..................................... 61
121. Chọn các trường để hiển thị với –field ........................................................................ 61
122. (Hoặc) Chọn các trường để hiển thị với –field ............................................................ 61
123. Chạy các plugin trên một phiên đã lưu ........................................................................ 62
124. Một phiên có nhóm 404/400 kết quả mà bạn muốn xóa ............................................. 62
125. Phiên có kết quả mà mình muốn xóa........................................................................... 62
126. Thư viện tùy chọn ........................................................................................................ 63
127. Import mô-đun wfuzz .................................................................................................. 63
128. testphp.......................................................................................................................... 64
129. Duy trì thơng số trong các phiên fuzzing .................................................................... 64
130. Duy trì thơng số trong các phiên fuzzing .................................................................... 65
131. Tạo 1 payload và chạy ................................................................................................. 65
132. Sử dụng phương thức get_payloads khi cần nhiều payload khác nhau ....................... 65
9


Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình

Hình
Hình
Hình

133. Sử dụng phương thức get_payloads khi cần nhiều payload khác nhau ....................... 66
134. Làm việc với kết quả đó trong ngôn ngữ với syntax ................................................... 66
135. Phương thức để đánh giá biểu thức ngôn ngữ ............................................................. 67
136. Cài Wfuzz về máy Kali ............................................................................................... 67
137. Nhập wfuzz -h để được trợ giúp .................................................................................. 68
138. Fuzzing các đường dẫn và tệp ..................................................................................... 68
139. Tham số Fuzzing trong URL ....................................................................................... 69
140. Fuzzing Cookies .......................................................................................................... 70
141. Verbs HTTP ................................................................................................................. 70
142. Verbs HTTP trên trang ................. 71
143. Wfuzz dùng để xác thực .............................................................................................. 72
144. Wfuzz dùng để xác thực trên trang />145. Đệ quy ......................................................................................................................... 73
146. Hạn chế của Wfuz........................................................................................................ 75

10


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


11


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 tồ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 tồn cho hệ thống có thể an tồ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. Ln 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 tồ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 q 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 ngun, cơng cụ. Mong thầy góp ý để có em thể hồ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
12


I. Giới thiệu về tool Wfuzz
1. Wfuzz là gì?
WFuzz là một tiện ích dịng lệnh có trong Kali Linux - là một công cụ
fuzzing được viết bằng Python. Các công cụ như Wfuzz thường được sử dụng
để kiểm tra các ứng dụng web và cách chúng xử lý cả 2 đầu vào (input) mong
đợi (expected) và không mong đợi (unexpected). Nó được sử dụng để khám
phá các lỗ hổng phổ biến trong các ứng dụng web thông qua các phương pháp
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
ngun 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 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.
13








Đa luồng.
Hỗ trợ xác thực (NTLM,cơ bản)
Cookie


Ngồ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 hồn tồ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.
14


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

15


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)

16


Chương 2: Hướng dẫn cài đặt, sử dụng Wfuzz
Hướng dẫn cải đặt

I.

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)
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:


1.1.

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

1.3.

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

17


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

18


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:

19



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
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ừ
/>
2.2.

2.3.

Lỗi PyCurl SSL
Nếu bạn gặp lỗi khi sử dụng Wfuzz chống lại các trang web SSL, đó có
thể là do một vấn đề đã biết cũ và có thể vào đây để kiểm tra:
/>Tóm lại, pycurl được xây dựng chống lại libcurl3-gnutls, nghĩa là không
hoạt động với một số trang web. Pycurl chạy fail với thông báo lỗi sau:

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
20


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.
2.
3.
4.
5.
6.

sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
sudo apt-get source python-pycurl
sudo apt-get build-dep python-pycurl –y
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 TỒN * 7. sudo rm -r .//; dpkgsource -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 TỒ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
21


Hình 23. Lỗi module named botle
Bạn có thể kiểm tra tại đây:
/>
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

22


Đầ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ố 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

1.1.

Getting help
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 hồn tồ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.
1.2.

Payloads
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
23


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
1.2.1. Chỉ định payload
Mỗi từ khóa FUZZ phải có payload tương ứng. Có một số cách tương
đương để chỉ định payload như:
• Cách dài dịng xác định rõ ràng tên tham số payload thơng qua
dịng lệnh:
24


Hình 30. Xác định tham số payload

• Cách khơng q 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:

25


×