hacktricks/pentesting-web/web-tool-wfuzz.md
2023-07-07 23:42:27 +00:00

29 KiB
Raw Blame History

Webツール - WFuzz

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

WebアプリケーションをFUZZするためのツールです。

Wfuzzは、Webアプリケーションの評価作業を容易にするために作成されました。これは、与えられたペイロードの値でFUZZキーワードの参照を置き換えるという単純なコンセプトに基づいています。

インストール

Kaliにインストール済み

Github: https://github.com/xmendez/wfuzz

pip install wfuzz

フィルタリングオプション

Code

コード

-w <wordlist>    Specify a wordlist to use for fuzzing
-w <ワードリスト>    ファジングに使用するワードリストを指定します

Code

コード

--hc <code>      Hide responses with the specified HTTP code
--hc <コード>      指定されたHTTPコードを持つレスポンスを非表示にします

Code

コード

--hh <string>    Hide responses containing the specified string
--hh <文字列>    指定された文字列を含むレスポンスを非表示にします

Code

コード

--hs <size>      Hide responses with the specified size
--hs <サイズ>      指定されたサイズを持つレスポンスを非表示にします

Code

コード

--hl <length>    Hide responses with the specified length
--hl <長さ>      指定された長さを持つレスポンスを非表示にします

Code

コード

--hw <word>      Hide responses containing words from the specified wordlist
--hw <ワード>      指定されたワードリストの単語を含むレスポンスを非表示にします

Code

コード

--hcw <word>     Hide responses containing words from the specified wordlist in the HTTP code
--hcw <ワード>     HTTPコード内の指定されたワードリストの単語を含むレスポンスを非表示にします

Code

コード

--hlw <word>     Hide responses containing words from the specified wordlist in the response length
--hlw <ワード>     レスポンスの長さに指定されたワードリストの単語を含むレスポンスを非表示にします

Code

コード

--hhw <word>     Hide responses containing words from the specified wordlist in the response headers
--hhw <ワード>     レスポンスヘッダーに指定されたワードリストの単語を含むレスポンスを非表示にします

Code

コード

--hs <status>    Hide responses with the specified status
--hs <ステータス>    指定されたステータスを持つレスポンスを非表示にします

Code

コード

--hc <cookie>    Hide responses with the specified cookie
--hc <クッキー>    指定されたクッキーを持つレスポンスを非表示にします

Code

コード

--hct <time>     Hide responses with a response time greater than the specified time
--hct <時間>     指定された時間よりも長いレスポンス時間を持つレスポンスを非表示にします

Code

コード

--hcl <length>   Hide responses with a response length greater than the specified length
--hcl <長さ>   指定された長さよりも長いレスポンス長を持つレスポンスを非表示にします

Code

コード

--hcs <size>     Hide responses with a response size greater than the specified size
--hcs <サイズ>     指定されたサイズよりも大きいレスポンスサイズを持つレスポンスを非表示にします
--hs/ss "regex" #Hide/Show
#Simple example, match a string: "Invalid username"
#Regex example: "Invalid *"

--hc/sc CODE #Hide/Show by code in response
--hl/sl NUM #Hide/Show by number of lines in response
--hw/sw NUM #Hide/Show by number of words in response
--hh/sh NUM #Hide/Show by number of chars in response
--hc/sc NUM #Hide/Show by response code

出力オプション

wfuzz offers several options for displaying the output of the fuzzing process. These options can be used to customize the format and level of detail in the output.

Quiet mode

The -q or --quiet option can be used to suppress all output except for the final results. This is useful when you only want to see the final output and don't need any additional information.

Verbose mode

The -v or --verbose option can be used to enable verbose mode, which provides more detailed output. This includes information about each request made during the fuzzing process, such as the request URL, response status code, and response headers.

Output format

The -o or --output option can be used to specify the format of the output. By default, wfuzz outputs the results in a table format. However, you can also choose to output the results in other formats, such as JSON or XML, by specifying the appropriate format option.

Output file

The -o or --output option can also be used to specify the output file. By default, wfuzz outputs the results to the console. However, you can redirect the output to a file by specifying the file path after the -o option.

Output filtering

The -f or --filter option can be used to filter the output based on specific criteria. This allows you to only display the results that match the specified criteria. For example, you can filter the output to only show the results with a specific response status code or response length.

Output coloring

The --hc or --highlight-color option can be used to enable output coloring. This highlights specific parts of the output, such as the request URL or response status code, in different colors to make it easier to read and analyze.

These output options provide flexibility and customization in how the fuzzing results are displayed, allowing you to focus on the information that is most relevant to your needs.

wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format

エンコーダのオプション

There are several options available for encoding data in wfuzz:

  • URL encoding: This option encodes special characters in the URL using percent-encoding. For example, the space character is encoded as "%20".
  • HTML encoding: This option encodes special characters in HTML entities. For example, the less-than symbol "<" is encoded as "<".
  • Base64 encoding: This option encodes data using the Base64 algorithm. It is commonly used for encoding binary data.
  • Hex encoding: This option encodes data using hexadecimal representation. Each byte is represented by two hexadecimal digits.
  • Unicode encoding: This option encodes data using Unicode characters. It is useful for bypassing filters that only allow ASCII characters.

To use an encoder, you can specify it with the --encoding option followed by the desired encoder. For example, to use URL encoding, you can use the --encoding url option.

wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode

エンコーダを使用するには、**"-w"または"-z"**オプションでそれを指定する必要があります。

例:

-z file,/path/to/file,md5 #Will use a list inside the file, and will transform each value into its md5 hash before sending it
-w /path/to/file,base64 #Will use a list, and transform to base64
-z list,each-element-here,hexlify #Inline list and to hex before sending values

チートシート

ログインフォームのブルートフォース攻撃

POST、単一のリスト、フィルター文字列非表示

wfuzz -c -w users.txt --hs "Login name" -d "name=FUZZ&password=FUZZ&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by line

POST、2つのリスト、フィルターコード表示

wfuzz -c -z file,wordlist/general/common.txt --hc 404 http://example.com/FUZZ

このコマンドは、POSTリクエストを使用してhttp://example.com/FUZZに対してwfuzzを実行します。FUZZは、wordlist/general/common.txtの単語リスト内の各単語で置き換えられます。--hc 404オプションは、404エラーコードを受け取った場合にwfuzzが停止するようにします。

wfuzz -c -z file,wordlist/general/common.txt --hc 404 --filter "code!=404" http://example.com/FUZZ

このコマンドは、--filterオプションを使用して、404エラーコードを除外します。つまり、wfuzzは404エラーコードを受け取った場合には停止しません。

wfuzz.py -c -z file,users.txt -z file,pass.txt --sc 200 -d "name=FUZZ&password=FUZ2Z&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by code

GET、2つのリスト、フィルター文字列表示、プロキシ、クッキー

wfuzz is a web application brute forcer that allows you to perform complex attacks by combining different parameters. In this section, we will explore some advanced features of wfuzz.

wfuzzは、異なるパラメータを組み合わせて複雑な攻撃を実行することができるWebアプリケーションのブルートフォーサーです。このセクションでは、wfuzzのいくつかの高度な機能について調査します。

GET Requests

To perform GET requests with wfuzz, you can use the -z option followed by the payload file. The payload file should contain a list of values to be tested for each parameter. For example:

$ wfuzz -z file,wordlist/general/common.txt http://example.com/FUZZ

This command will replace the FUZZ keyword with each value from the common.txt wordlist file.

wfuzzを使用してGETリクエストを実行するには、-zオプションの後にペイロードファイルを使用します。ペイロードファイルには、各パラメータにテストする値のリストを含める必要があります。例えば:

$ wfuzz -z file,wordlist/general/common.txt http://example.com/FUZZ

このコマンドは、common.txtワードリストファイルの各値でFUZZキーワードを置き換えます。

2 Lists

wfuzz also allows you to use two lists of values for each parameter. This can be useful when you want to test combinations of different values. To use two lists, you can use the -z option followed by the payload file, and then use the :: separator to specify the second list. For example:

$ wfuzz -z file,wordlist/general/common.txt::wordlist/general/numbers.txt http://example.com/FUZZ

This command will replace the FUZZ keyword with each combination of values from the common.txt and numbers.txt wordlist files.

wfuzzは、各パラメータに2つの値のリストを使用することもできます。これは、異なる値の組み合わせをテストしたい場合に便利です。2つのリストを使用するには、-zオプションの後にペイロードファイルを使用し、::セパレータを使用して2番目のリストを指定します。例えば

$ wfuzz -z file,wordlist/general/common.txt::wordlist/general/numbers.txt http://example.com/FUZZ

このコマンドは、common.txtおよびnumbers.txtワードリストファイルの値の組み合わせごとにFUZZキーワードを置き換えます。

Filter String (Show)

The -f option in wfuzz allows you to filter the responses based on a specific string. This can be useful when you want to focus on specific responses that contain certain keywords. For example:

$ wfuzz -z file,wordlist/general/common.txt -f "Welcome" http://example.com/FUZZ

This command will only show the responses that contain the string "Welcome".

wfuzzの-fオプションを使用すると、特定の文字列に基づいてレスポンスをフィルタリングすることができます。これは、特定のキーワードを含む特定のレスポンスに焦点を当てたい場合に便利です。例えば:

$ wfuzz -z file,wordlist/general/common.txt -f "Welcome" http://example.com/FUZZ

このコマンドは、文字列「Welcome」を含むレスポンスのみを表示します。

Proxy

wfuzz supports proxying requests through a proxy server. You can use the --proxy option followed by the proxy URL to specify the proxy server. For example:

$ wfuzz --proxy http://proxy.example.com:8080 http://example.com/FUZZ

This command will send the requests through the proxy server located at http://proxy.example.com:8080.

wfuzzは、プロキシサーバーを介してリクエストをプロキシすることができます。プロキシサーバーを指定するには、--proxyオプションの後にプロキシURLを使用します。例えば

$ wfuzz --proxy http://proxy.example.com:8080 http://example.com/FUZZ

このコマンドは、http://proxy.example.com:8080にあるプロキシサーバーを介してリクエストを送信します。

Cookies

wfuzz allows you to specify cookies to be included in the requests. You can use the --cookie option followed by the cookie value to specify the cookies. For example:

$ wfuzz --cookie "session=1234567890" http://example.com/FUZZ

This command will include the cookie session=1234567890 in the requests.

wfuzzでは、リクエストに含めるクッキーを指定することができます。クッキーを指定するには、--cookieオプションの後にクッキーの値を使用します。例えば:

$ wfuzz --cookie "session=1234567890" http://example.com/FUZZ

このコマンドは、リクエストにクッキーsession=1234567890を含めます。

wfuzz -c -w users.txt -w pass.txt --ss "Welcome " -p 127.0.0.1:8080:HTTP -b "PHPSESSIONID=1234567890abcdef;customcookie=hey" "http://example.com/index.php?username=FUZZ&password=FUZ2Z&action=sign+in"

ディレクトリ/RESTfulのブルートフォース攻撃

Arjunのパラメータワードリスト

wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ

パスパラメータのブルートフォース攻撃

パスパラメータのブルートフォース攻撃は、Webアプリケーションのセキュリティ評価中に使用される一般的なテクニックです。この攻撃では、URLのパスにあるパラメータの値を推測し、有効な値を見つけることを試みます。

攻撃者は、一連の可能な値を持つパスパラメータを作成し、それらを順番に送信してレスポンスを受け取ります。有効な値が見つかるまで、攻撃者は継続的に異なる値を試すことができます。

この攻撃は、パスパラメータがセキュリティ上の脆弱性を持つ可能性がある場合に特に有効です。例えば、パスパラメータがディレクトリの名前やファイルのIDなどの重要な情報を含んでいる場合、攻撃者はそれを利用してシステムにアクセスしたり、機密情報を取得したりすることができます。

ブルートフォース攻撃は、wfuzzなどのツールを使用して自動化することができます。これにより、大量の可能な値を効率的に試すことができます。ただし、この攻撃は合法的なテストの範囲内で行われるべきであり、許可なく実施することは違法です。

wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'

ヘッダー認証

基本、2つのリスト、フィルター文字列表示、プロキシ

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --basic FUZZ:FUZ2Z "http://example.com/index.php"

NTLM、2つのリスト、フィルター文字列表示、プロキシ


NTLM

NTLMNT LAN Managerは、Windowsベースのシステムで使用される認証プロトコルです。WFuzzは、NTLM認証を使用してWebアプリケーションをテストするために使用できます。

2つのリスト

WFuzzでは、2つのリストを使用して攻撃を実行することができます。1つ目のリストは、ユーザー名のリストであり、2つ目のリストはパスワードのリストです。WFuzzは、これらのリストを組み合わせて認証の試行を行います。

フィルター文字列(表示)

WFuzzでは、フィルター文字列を使用して、特定の応答を表示することができます。フィルター文字列を指定することで、攻撃の結果を絞り込むことができます。

プロキシ

WFuzzは、プロキシを使用して攻撃を実行することもできます。プロキシを介して攻撃を行うことで、トラフィックを監視したり、攻撃の可視化を行ったりすることができます。

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --ntlm 'domain\FUZZ:FUZ2Z' "http://example.com/index.php"
wfuzz -c -w users.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "Cookie:id=1312321&user=FUZZ"  "http://example.com/index.php"

User-Agent、フィルターコード非表示、プロキシ

User-Agentは、Webサーバーに送信されるHTTPリクエストヘッダーの一部であり、クライアントの情報を識別するために使用されます。WFuzzでは、User-Agentをカスタマイズすることができます。これにより、特定のユーザーエージェントを使用してリクエストを送信することができます。

フィルターコードは、WFuzzが使用するフィルタリング機能です。これにより、レスポンスを特定の条件に基づいてフィルタリングすることができます。フィルターコードを使用することで、不要な情報を非表示にすることができます。

プロキシは、クライアントとサーバーの間に存在する中間サーバーです。WFuzzでは、プロキシを使用してトラフィックを中継することができます。これにより、リクエストとレスポンスの内容を監視および変更することができます。

wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ"  "http://example.com/index.php"

ホスト

wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-
top1million-20000.txt --hc 400,404,403 -H "Host: FUZZ.example.com" -u
http://example.com -t 100

ファイルを使用する

wfuzz can be used to brute force HTTP verbs (methods) by specifying a file containing a list of verbs to test. This can be useful for identifying hidden or misconfigured endpoints that respond differently to different HTTP methods.

To use a file for HTTP verb brute forcing, you can create a text file with one verb per line. For example, you can create a file called verbs.txt with the following content:

GET
POST
PUT
DELETE

Then, you can use wfuzz with the --hc option to specify the desired response code and the --hw option to specify a word that should be present in the response when the verb is allowed. For example, to brute force the HTTP verbs using the verbs.txt file, you can run the following command:

wfuzz -c -z file,verbs.txt --hc 200 --hw "OK" http://example.com/FUZZ

In this command, -c is used to display the output in a compact format, -z file,verbs.txt specifies the file containing the list of verbs, --hc 200 specifies that the response code should be 200, and --hw "OK" specifies that the word "OK" should be present in the response.

By replacing FUZZ in the URL with the appropriate placeholder, wfuzz will replace it with each verb from the file and send a request to the target URL. If the response code is 200 and the word "OK" is present in the response, it means that the verb is allowed.

Using a file for HTTP verb brute forcing can help you discover hidden functionality or misconfigurations in web applications. However, it is important to note that brute forcing HTTP verbs can be time-consuming and may trigger security mechanisms, so it should be used responsibly and with proper authorization.

wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"

インラインリストの使用

The wfuzz tool allows you to use inline lists to fuzz different values in a request. This can be useful when you want to test multiple inputs or parameters at once.

To use an inline list, you need to enclose the list of values in curly braces {} and separate each value with a comma. For example, if you want to fuzz the username parameter with a list of common usernames, you can use the following syntax:

wfuzz -u http://example.com/login.php?username=FUZZ -w /path/to/usernames.txt

In this example, the FUZZ keyword is used to indicate the position where the values from the list will be injected. The -w option specifies the path to the file containing the list of usernames.

You can also use multiple inline lists in a single request. For example, if you want to fuzz both the username and password parameters, you can use the following syntax:

wfuzz -u http://example.com/login.php?username=FUZZ&password=FUZZ2 -w /path/to/usernames.txt -w /path/to/passwords.txt

In this case, the FUZZ keyword is used for the username parameter, and the FUZZ2 keyword is used for the password parameter. The -w option is used twice to specify the paths to the files containing the lists of usernames and passwords.

Using inline lists can greatly increase the efficiency of your fuzzing process by allowing you to test multiple values in a single request.

$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/

ディレクトリとファイルのブルートフォース

WFuzzは、ディレクトリとファイルのブルートフォース攻撃に使用される強力なツールです。WFuzzは、指定されたURLに対して異なるパスやファイル名を試し、存在するディレクトリやファイルを見つけることができます。

以下は、WFuzzを使用してディレクトリとファイルのブルートフォース攻撃を実行するための手順です。

  1. WFuzzをインストールします。

  2. WFuzzを使用して、ブルートフォース攻撃を実行する対象のURLを指定します。

    wfuzz -c -z file,/path/to/wordlist.txt http://target.com/FUZZ
    
    • -cオプションは、正常な応答のみを表示するために使用されます。
    • -zオプションは、ブルートフォース攻撃に使用するワードリストを指定します。
    • /path/to/wordlist.txtは、ワードリストファイルのパスを指定します。
    • http://target.com/FUZZは、ブルートフォース攻撃を実行する対象のURLを指定します。FUZZは、WFuzzが置き換えるプレースホルダです。
  3. WFuzzは、指定されたワードリストの各エントリを試し、存在するディレクトリやファイルを見つけます。

    ======================================
    ID           Response   Lines    Word
    ======================================
    000000001:   200        21 L     47 W     "admin"
    000000002:   200        21 L     47 W     "backup"
    000000003:   404        0 L      0 W      "config"
    000000004:   200        21 L     47 W     "index"
    000000005:   200        21 L     47 W     "login"
    ======================================
    

    上記の例では、adminbackupconfigindexloginというディレクトリやファイルが存在することがわかります。

  4. ブルートフォース攻撃の結果を分析し、潜在的な脆弱性やセキュリティ上の問題を特定します。

ディレクトリとファイルのブルートフォース攻撃は、ウェブアプリケーションのセキュリティ評価や侵入テストにおいて重要な手法です。WFuzzを使用することで、効率的かつ自動化されたブルートフォース攻撃を実行することができます。

#Filter by whitelisting codes
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200,202,204,301,302,307,403 http://example.com/uploads/FUZZ

Websをバイパスするためのツール

https://github.com/carlospolop/fuzzhttpbypass

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥