Một regex python hợp lệ nên được sử dụng trong các thiết bị chuyển mạch này, nếu không sẽ xuất hiện lỗi:
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
2. Cách sử dụng cơ bản
2.1. Fuzzing Paths và Files
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ự đố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.
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
2.2. Fuzzing Parameters trong URLs
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
2.3. Fuzzing POST Requests
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:
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 u cầu HTTP
Cookie cũng có thể fuzzed:
Hình 49. fuzz cookie
2.5. Fuzzing Custom headers
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:
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
2.6. Fuzzing HTTP Verbs
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”.
2.7. Proxies
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:
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.
2.8. Authentication
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”.
2.9. Đệ quy (Recursion)
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:
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
2.10. Perfomance
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.
2.11. Ghi vào một tệp
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:
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
2.12. Đầu ra khác nhau
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ế:
37
Hình 66. Thay thế hồn tồ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à tốn tử có sẵn.
3. Cách sử dụng nâng cao
3.1. Cách sử dụng wfuzz theo lựa chọn toàn cậu – Wfuzz global option
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:
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ó.
39 Hình 71. Sử dụng zip • Chain Hình 72. Sử dụng chain • Product Hình 73. Kết hợp 2 payload sử dụng các trình vịng lặp 3.1. Encoders
Trong Wfuzz, encoder là sự chuyển đổi payload từ định dạng này sang định dạng khác. Danh sách các encoder có sẵn có thể lấy bằng lệnh sau:
Hình 74. Lấy danh sách các encoder có sẵn
3.3.1. Chỉ định một encoder
Encoder được chỉ định như một tham số payload. Có hai cách t ương đương để chỉ định encoder trong payload:
40 • Cách dài dịng:
Hình 75. Chỉ định encoder trong payload bằng cách dài
• Cách ngắn gọn sử dụng dịng lệnh tùy chọn zE
Hình 76. Chỉ định encoder trong payload bằng cách sử dụng dòng lệnh tùy chọn zE zE
• Cách ngắn gọn khác
Hình 77. Cách khác để chỉ định encoders
3.3.2. Chỉ định multiple encoders
Một số Encoder có thể được chỉ định cùng một lúc, sử dụng “-” làm dấu phân tách:
41
Hình 78. Chỉ định nhiều Encoder cùng 1 lúc
42
Hình 79. Xâu chuỗi các Encoder bằng ký tự @
Đặc tả thông số “sha1 @ none” ở trên sẽ mã hóa payload bằng encoder sha1 và kết quả sẽ được mã hóa lại bằng cách sử dụng encoder none.
Encoder được nhóm theo danh mục. Điều này cho phép chọn một số encoder theo danh mục, ví dụ:
Hình 80. Chọn số Encoders theo danh mục
3.1. Scan/Parse Plugins
Wfuzz khơng chỉ là một tool để có thể qt nội dung Web. Wfuzz có thể giúp bạn bảo mật các ứng dụng web của mình bằng cách tìm và khai thác lỗ hổng ứng dụng web.
Trình quét lỗ hổng ứng dụng web của Wfuzz được hỗ trợ bởi các plugin. Có thể lấy danh sách các plugin quét bằng cách sử dụng lệnh sau:
43
Các tập lệnh được nhóm thành các danh mục. Một tập lệnh có thể thuộc nhiều danh mục cùng một lúc.
Có 2 loại chung:
• Passive: Các tập lệnh passive phân tích các yêu cầu và phản hồi hiện có mà khơng thực hiện các u cầu mới.
• Active: Active các tập lệnh thực hiện các yêu cầu mới đối với ứng dụng để thăm dò các lỗ hổng bảo mật. Các danh mục bổ sung là:
• Discovery: Discovery plugin giúp thu thập thông tin một trang web bằng cách tự động sắp xếp nội dung được khám phá vào wfuzz của yêu cầu.
Danh mục mặc định nhóm các plugin được chạy theo mặc định.
Chế độ quét được chỉ định khi sử dụng tham số –script, theo sau là các plugin đã chọn. Các plugin có thể là được chọn theo danh mục hoặc tên, các ký tự đại diện cũng có thể được sử dụng.
Thơng tin chi tiết của tập lệnh có thể được lấy bằng –scrip-help, ví dụ:
Hình 82. Thơng tin chi tiết của tập lệnh có thể được lấy bằng –script-help
44
Hình 83. Phân tích cú pháp tệp robots.txt
Để khơng qt đi quét lại các yêu cầu giống nhau (với các thơng số giống nhau), có một bộ nhớ đệm, bộ nhớ đệm có thể bị vơ hiệu hóa với flag – no-cache.
Ví dụ: nếu chúng ta nhắm mục tiêu một máy chủ web có cùng một URL nhưng các giá trị thông số khác nhau, chúng ta nhận được:
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 nhau
45
Hình 85. Kết quả khi vơ hiệu hóa bộ nhớ cache
3.4.1. Custom scripts
Nếu bạn muốn tạo các Custom scripts, hãy đặt chúng vào thư mục chính của bạn. Để tận dụng tính năng này, một thư mục có tên “script” phải được tạo bên dưới thư mục “.wfuzz”.
3.1. Recipes (Công thức)
Bạn có thể lưu các tùy chọn dịng lệnh Wfuzz vào một tệp để thực thi sau này hoặc để phân phối dễ dàng.
Để tạo một công thức, hãy thực hiện như sau:
Hình 86. Tạo một cơng thức
46
Hình 87. Thực hiện wfuzz bằng cách sử dụng tùy chọn --recipe
Bạn có thể kết hợp một công thức với các tùy chọn dịng lệnh bổ sung, ví dụ:
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
Một số cơng thức cũng có thể được kết hợp:
Hình 89. Một số cơng thức cũng có thể được kết hợp
Trong trường hợp các tùy chọn lặp lại, các tùy chọn dòng lệnh được ưu tiên hơn các tùy chọn có trong cơng thức. Cơng thức cuối cùng được ưu tiên.
3.1. Kết nối với một máy chủ cụ thể
Tùy chọn –ip có thể được sử dụng để kết nối với máy chủ và cổng cụ thể thay vì máy chủ và cổng của URL:
47
Điều này khá hữu ích, chẳng hạn để kiểm tra xem một proxy ngược có thể bị điều khiển thành các yêu cầu định tuyến sai đến một điểm lựa chọn không.
3.1. Chế độ quét: Bỏ qua lỗi và ngoại lệ
Trong trường hợp có sự cố mạng (ví dụ: lỗi DNS, kết nối bị từ chối, v.v.), Wfuzz sẽ đưa ra một ngoại lệ và dừng thực hiện như hình dưới đây:
Hình 91. Ngoại lệ khi gặp sự cố mạng
Bạn có thể yêu cầu Wfuzz tiếp tục thực thi, bỏ qua lỗi bằng cách cung cấp tùy chọn -Z. Lệnh sau khi quét sẽ nhận được các kết quả sau:
48
Lỗi được hiển thị do mã XXX, payload được sử dụng kèm theo dấu chấm than và thông báo ngoại lệ. Mã lỗi có thể được lọc bằng cách sử dụng biểu thức “XXX”. Ví dụ:
Hình 93. Mã lỗi được lọc bằng cách sử dụng biểu thức XXX
Khi sử dụng Wfuzz ở chế độ quét, các yêu cầu HTTP sẽ mất nhiều thời gian hơn do lỗi mạng hết thời gian chờ. Đây có thể là được tinh chỉnh bằng cách sử dụng các tham số dòng lệnh –req-delay và –conn-delay.
3.1. Ngôn ngữ lọc
Ngôn ngữ bộ lọc của Wfuzz được xây dựng bằng cách sử dụng pyparsing do đó nó phải được cài đặt trước khi sử dụng lệnh tham số dòng “– filter, – prefilter, –slice, –field và –efield”.
Thông tin về ngơn ngữ bộ lọc cũng có thể được lấy khi thực thi:
Hình 94. Lấy thơng tin về ngơn ngữ bộ lọc
Biểu thức bộ lọc phải được tạo bằng các ký hiệu và tốn tử sau:
• Toán tử Boolean: Các tốn tử “and”, “or” và “not” có thể được
sử dụng để xây dựng các biểu thức điều kiện.
• Tốn tử biểu thức: Các toán tử biểu thức như “=! = <>> = <=” Có thể được sử dụng để kiểm tra các giá trị. Ngồi ra, các tốn tử sau để phù hợp với văn bản có sẵn:
49
Tốn tử Mơ tả
=~ Đúng khi biểu thức thông thường chỉ định đúng giá trị
~ Tương đương với “str2” trong “str1” ở Python (Không phân biệt chữ
hoa, chữ thường)
!~ Tương đương với “str2” không trong “str1” ở Python (Không phân biệt
chữ hoa, chữ thường)
Bảng 1. Bảng toán tử biểu thức
Ngồi ra, các tốn tử gán:
Tốn tử Mơ tả
:= Gán một giá trị
=+ Nối giá trị ở bên trái
=- Nối giá trị ở bên phải
Bảng 2. Bảng toán tử gán
Nơi các giá trị có thể là:
• Ngun thủy cơ bản:
Tên Mơ tả
‘string’ Xâu trích dẫn
0..9+ Giá trị Integer
XXX Yêu cầu lỗi HTTP
BBB Đường cơ sở
Bảng 3. Bảng giá trị nguyên thủy
• Giá trị cũng có thể được sửa đổi bằng cách sử dụng các toán tử sau:
Tên Viết tắt Mô tả
value|unquote() value|un() Bỏ trích dẫn giá trị