II. Hướng dẫn sử dụng
1. Bắt đầu:
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à toán tử sau:
• Tố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ị ngun 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ị
value|lower() value|l() Giá trị in thường
value|upper() Giá trị in hoa
value|encode(‘encoder’, ‘value’)
value|e(‘enc’, ‘val’)
50 value|decode(‘decoder’, ‘value’) value|d(‘dec’, ‘val’) Trả về encoder.encode(value) value|replace(‘what’, ‘with’) value|r(‘what’, ‘with’)
Trả về giá trị thay thế what với with
value|unique() value|u() Trả về True nếu giá trị là độc nhất
value|startswith(‘value’) value|sw(‘value’) Trả về true nếu giá trị bắt đầu bằng param
value|gregex(‘expression’ )
value|gre(‘exp’) Trả về nhóm regex đầu tiên trùng
với giá trị
Bảng 4. Bảng các tốn tử sửa đổi giá trị
• Khi có FuzzResult, bạn có thể thực hiện xem xét thời gian chạy của các đối tượng bằng cách sử dụng các ký hiệu sau
Tên Viết tắt Mô tả
url Kết quả của Wfuzz: HTTP yêu cầu url
description Kết quả của Wfuzz: Mô tả
nres Kết quả của Wfuzz: Định danh
code c Kết quả của Wfuzz: HTTP code phản hồi
chars h Kết quả của Wfuzz: HTTP phản hồi chars
lines l Kết quả của Wfuzz: HTTP phản hồi dòng
words w Kết quả của Wfuzz: HTTP phản hồi từ
md5 Kết quả của Wfuzz: HTTP phản hồi mã băm md5
history r Kết quả của Wfuzz: Đối tượng FuzzRequest được liên kết
plugins Kết quả scan của Wfuzz plugins
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
Thuộc tính của đối tượng FuzzRequest (bạn cần sử dụng tiền tố r.) Chẳng hạn như:
Tên Mô tả
url HTTP yêu cầu url
urlp HTTP yêu cầu phân tích URP
method HTTP yêu cầu verb
scheme HTTP yêu cầu scheme
host HTTP yêu cầu host
51
raw_content HTTP phản hồi content bao gồm headers
cookies.all Tất cả cookie HTTP yêu cầu và phản hồi
cookies.request HTTP yêu cầu cookie
cookies.response HTTP phản hồi cookie
cook-
ies.request.<<name>>
Một HTTP cụ thể yêu cầu cookie
cook-
ies.response.<<name>>
Một HTTP cụ thể phản hồi cookie
headers.all Tất cả yêu cầu và phản hồi HTTP headers
headers.request HTTP yêu cầu headers
headers.response HTTP phản hồi headers
head-
ers.request.<<name>>
Một HTTP cụ thể yêu cầu headers
head-
ers.response.<<name>>
Một HTTP cụ thể phản hồi headers
params.all Tất cả HTTP yêu cầu GET và POST tham số
params.get Tất cả HTTP yêu cầu GET tham số
params.post Tất cả HTTP yêu cầu POST parameters trả về theo thứ
tự từ điển
params.raw_post Yêu cầu HTTP theo phương thức POST tham số payload
params.get.<<name>> Một HTTP cụ thể yêu cầu tham số params.post.<<name>> Một HTTP cụ thể phản hồi tham số
pstrip Trả về chữ ký của yêu cầu HTTP bằng cách sử dụng tên
của tham số mà khơng có giá trị (hữu ích cho các hoạt động duy nhất)
is_path Trả về true nếu đường dẫn HTTP chỉ đến một chỉ mục
reqtime Trả về tổng thời gian mà HTTP yêu cầu cần để được truy
xuất
Bảng 6. Thuộc tính của đối tượng FuzzRequest
Điều đáng chú ý là Wfuzz sẽ cố gắng phân tích cú pháp các tham số POST theo tiêu đề loại nội dung được chỉ định. Hiện tại, ứng dụng / x-www- form-urlencoded, multiart / form-dat và application / json được hỗ trợ. Điều này dễ bị tùy thuộc vào định dạng dữ liệu, raw_post sẽ không cố gắng thực hiện bất kỳ quá trình xử lý nào.
52
Trường URL FuzzRequest được chia thành các phần nhỏ hơn (chỉ đọc) bằng cách sử dụng mơ-đun của Python urlparse trong thuộc tính urlp.
Urlparse phân tích cú pháp một URL thành: Scheme: // netloc / path; tham số? Query #gment. Ví dụ, đối với URL
“http://www.google.com/dir/test.php?id=1” bạn có thể nhận được các giá trị sau: Tên Giá trị urlp.scheme http urlp.netloc Google urlp.path /dir/test.php urlp.params urlp.query id=1 urlp.fragment urlp.ffname test.php urlp.fext .php urlp.fname test
urlp.hasquery Trả về true nếu URL chứa 1 xâu query
urlp.isbllist Trả về true khi phần mở rộng tệp URL được đưa vào danh sách
đen của khám phá cấu hình
Bảng 7. Trường URL FuzzRequest
Việc xem xét nội quan của tải trọng cũng có thể được thực hiện bằng cách sử dụng từ khóa FUZZ:
Tên Mô tả
FUZnZ Cho phép truy cập xâu Nth payload
FUZnZ[field] Cho phép truy cập thuộc tính Nth
payload
Bảng 8. Sử dụng từ khóa FUZZ
Trong đó trường là một trong những trường được mô tả ở trên. 3.8.1. Lọc kết quả
Tham số dòng lệnh –filter kết hợp với ngôn ngữ bộ lọc được mô tả cho phép bạn thực hiện nhiều hơn phân tích kết quả phức tạp hơn so với các tùy chọn bộ lọc tiêu chuẩn như “–hc / hl / hw / hh”, “–sc / sl / sw / sh” và “-ss / hs”.
53
Hình 95. Phân tích tùy chọn bộ lọc tiêu chuẩn
Sử dụng phần kết quả và payload để tìm kiếm nội dung cụ thể được trả về trong response
Hình 96. Phân tích tùy chọn bộ lọc tiêu chuẩn
Tương đương với:
Hình 97. Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khác)
Một biến thể thú vị hơn của các ví dụ trên có thể là:
Hình 98. Phân tích tùy chọn bộ lọc tiêu chuẩn (ví dụ khácx2)
Bạn cũng có thể sử dụng các trường dưới dạng giá trị boolean. Ví dụ: bộ lọc này sẽ chỉ hiển thị các u cầu có tham số:
54
Hình 99. Bộ lọc hiển thị các yêu cầu có tham số
Các kết quả có vấn đề về plugin cũng có thể được lọc:
Hình 100. Các kết quả có vấn đề về plugin được lọc
3.8.2. Payload mangling 3.8.2.1. Slicing a payload
Tham số dịng lệnh –slice kết hợp với ngơn ngữ được mô tả cho phép bạn lọc payload. Các payload để lọc được chỉ định bởi –z, các tùy chọn phải đứng trước tham số dòng lệnh – slice.
Biểu thức được chỉ định phải trả về giá trị boolean, ví dụ, sử dụng tốn tử duy nhất được hiển thị bên dưới:
Hình 101. Sử dụng tốn tử để trả về giá trị Boolean
Điều đáng chú ý là, loại payload quy định các ký hiệu ngơn ngữ có sẵn. Ví dụ: payload từ điển chẳng hạn như trong ví dụ trên khơng có ngữ cảnh đối tượng FuzzResult đầy đủ và do đó khơng thể sử dụng các trường đối tượng.
55
Khi cắt một payload FuzzResult, bạn đang truy cập trực tiếp vào FuzzResult, do đó với phiên trước đó như:
Hình 102. Kết quả phiên trước đó
Điều này có thể được sử dụng để lọc payload:
Hình 103. Lọc payload
Trên thực tế, trong tình huống này, FUZZ đề cập đến kết quả trước đó (nếu có):
Hình 104. Fuzz đề cập kết quả trước đó
3.8.2.2. Re-writing a payload
Tham số lệnh slice cũng cho phép ghi lại một payload. Bất kỳ giá trị nào, ngoài boolean, được trả về bởi biểu thức được chỉ định sẽ được hiểu không phải để lọc payload nguồn mà để thay đổi giá trị của nó. Ví dụ:
56
Hình 105. Tham số lệnh slice cũng cho phép ghi lại một payload
3.8.2.3. Prefilter
Tham số dịng lệnh –prefilter tương tự như –slice nhưng khơng được liên kết với bất kỳ trọng tải nào. Đây là một bộ lọc chung được thực hiện ngay trước khi bất kỳ yêu cầu HTTP nào được thực hiện.
Trong ngữ cảnh này, bạn đang lọc một đối tượng FuzzResult, đối tượng này là kết quả của việc kết hợp tất cả các trọng tải đầu vào, chưa được cập nhật với kết quả thực hiện yêu cầu HTTP liên quan của nó và do đó thiếu một số thông tin.