Thực hiện wfuzz bằng cách sử dụng tùy chọn recipe

Một phần của tài liệu 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 (Trang 46)

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:

• 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.

• Toá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:

Toá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à:

• Nguyên 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 tố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 toá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 yê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 toá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.

3.1. Hệ thống lại kết quả trước đó

Kết quả plugin chứa một kho tàng dữ liệu. Wfuzz payload và đối tượng (giải thích trong bộ lọc phần ngữ pháp) hiển thị giao diện đối tượng Python cho các kết quả bổ sung. Điều này cho phép bạn thực hiện bán tự động kiểm 40 tra dựa trên kết quả của plugin hoặc biên dịch một bộ kết quả để sử dụng trong một cơng cụ khác.

Các tốn tử gán có thể được sử dụng để sửa đổi các yêu cầu trước đó, ví dụ: hãy thêm một dấu ngoặc kép vào mỗi chuỗi trước khi thực hiện yêu cầu HTTP:

Các yêu cầu / phản hồi HTTP đã thực hiện trước đây chứa một kho tàng dữ liệu. Tải trọng Wfuzz và phần mở đầu đối tượng (được giải thích trong phần ngữ pháp bộ lọc) hiển thị giao diện đối tượng Python cho các yêu cầu / phản hồi được ghi lại bởi Wfuzz hoặc các công cụ khác.

Đ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ề các hành động của bạn 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.

Một vài ý tưởng:

57

• So sánh nội dung phản hồi và tiêu đề của các yêu cầu đã được

làm mờ với nội dung ban đầu của chúng

• Tìm kiếm các yêu cầu có mã thơng báo CSRF được hiển thị trong

URL

• Tìm kiếm câu trả lời có nội dung JSON với loại nội dung khơng

chính xác

Để tính tốn lại các kết quả trước đó, nên sử dụng trọng tải tạo bối cảnh đối tượng FuzzResult đầy đủ.

• Payload wfuzzp: Kết quả wfuzz có thể được lưu trữ bằng cách sử dụng tùy chọn –oF như minh họa bên dưới:

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

• Payload burpstate và burplog:

Wfuzz có thể đọc nhật ký burp’s (TM) hoặc các trạng thái đã lưu. Điều này cho phép lọc hoặc thiết lập lại các yêu cầu và phản hồi proxy ợ.

Sau đó, bạn có thể tính tốn lại các kết quả đó bằng cách sử dụng các trọng tải được biểu thị. Để lặp lại một u cầu chính xác cách nó được lưu trữ, bạn phải sử dụng từ khóa FUZZ trên dịng lệnh:

Hình 107. Sử dụng từ khóa FUZZ để lặp lại một u cầu chính xác cách nó được lưu trữ lưu trữ

Các yêu cầu trước đó cũng có thể được sửa đổi bằng cách sử dụng các cơng tắc dịng lệnh thơng thường. Một số ví dụ dưới đây:

• Thêm tiêu đề mới:

58

• Sử dụng cookie mới được chỉ định bởi một payload khác:

Hình 109. Sử dụng cookie mới được chỉ định bởi một payload khác

• Các yêu cầu HTTP được lưu trữ có thể được in bằng cờ –prev để

so sánh kết quả cũ và mới:

Hình 110. Các yêu cầu HTTP được lưu trữ có thể được in bằng cờ –prev

• Cùng một yêu cầu đối với một URL khác:

Hình 111. Cùng một yêu cầu đối với một URL khác

Nếu bạn không muốn sử dụng yêu cầu đã lưu đầy đủ:

• Có thể truy cập vào các trường đối tượng HTTP cụ thể bằng cách sử dụng tham số payload attr:

Hình 112. Sử dụng tham số payload attr

• Hoặc bằng cách chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field]:

Hình 113. Chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field]

Ví dụ: điều này có thể được sử dụng để thực hiện các yêu cầu mới dựa trên các giá trị được lưu trữ:

59

Hình 114. Ví dụ về chỉ định từ khóa FUZZ và tên trường(field) ở dạng FUZZ [field]

Lệnh trên sẽ tạo ra các yêu cầu HTTP như sau:

Hình 115. Tạo ra các yêu cầu HTTP

Bạn có thể lọc payload bằng cách sử dụng ngữ pháp bộ lọc như được mô tả trước đây.

3.1. Hệ thống lại các kết quả trước đó

Kết quả plugin chứa một kho tàng dữ liệu. Payloaf Wfuzz và nội quan đối tượng (được giải thích trong phần ngữ pháp bộ lọc) hiển thị giao diện đối tượng Python cho các kết quả bổ sung. Điều này cho phép bạn thực hiện các bài kiểm tra bán tự động dựa trên kết quả của plugin hoặc biên dịch một bộ kết quả để sử dụng trong một công cụ khác.

3.10.1. Yêu cầu mangling

Các tốn tử gán có thể được sử dụng để sửa đổi các u cầu trước đó, Ví dụ: hãy 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 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 HTTP

Lệnh trên tìm kiếm các sự cố chèn SQL đơn giản.

4. Wfpayload

wfpayload sử dụng cùng một động cơ như wfuzz nhưng thay vì thực hiện các yêu cầu HTTP, hãy sử dụng các plugin payload của wfuzz để tạo nội dung mới hoặc phân tích các phiên đã lưu.

4.1. Tạo từ điển mới

Bạn có thể sử dụng wfpayload để tạo từ điển mới:

Hình 117. Tạo từ điển mới

Có thể sử dụng cùng một cú pháp của wfuzz, ví dụ:

Hình 118. Sử dụng cùng cú pháp của wfuzz tạo từ điển mới

4.2. Phân tích các phiên đã lưu

Các yêu cầu / phản hồi HTTP được thực hiện trước đây chứa một kho tàng dữ liệu. Bạn có thể sử dụng wfpayload để lọc và phân tích các phiên đã lưu trước đó. Wfpayload cũng có thể đọc các phiên từ các cơng cụ bên ngồi, chẳng hạn như burp

61

Điều này cho phép bạn tìm kiếm các lỗ hổng mới hoặc hiểu mục tiêu cơ

Một phần của tài liệu 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 (Trang 46)

Tải bản đầy đủ (PDF)

(77 trang)