Web安全 --Wfuzz 使用大全

前言:  做web滲透大多數時候bp來fuzz   偶爾會有覺得要求達不到的時候 wfuzz就很有用了這時候

用了很久了這點來整理一次 

 

 

 

 

 

 

 

 

 

 

wfuzz 是一款Python開發的Web安全模糊測試工具。

下載地址

https://github.com/xmendez/wfuzz

官方手冊

https://wfuzz.readthedocs.io/en/latest/

 

簡而言之就是wfuzz可以用在做請求參數參數類的模糊測試,也可以用來做Web目錄掃描等操作。

 

 

0x01 簡單使用

pip install wfuzz

 

 

 

 

 

使用:

wfuzz -w 字典 地址
wfuzz -w qing.txt https://www.cnblogs.com/-qing-/FUZZ

 

 

 

 

 

 

 

使用字典:

wfuzz -z file --zP fn=wordlist https://www.cnblogs.com/-qing-/FUZZ


wfuzz -z file,wordlist https://www.cnblogs.com/-qing-/FUZZ

 

 

 

 

-z file使用模塊,這個模塊需要一個參數fn   --zP fn=wordlist是定義fn參數的值

第二條命令簡寫了第一條命令的賦值

-z 或-w 參數可以同時指定多個字典。

 

wfuzz -w 字典1 -w 字典2 -w 字典3 URL/FUZZ/FUZ2Z.FUZ3Z

 

通過返回結果我們要關注的就是ID、Response、 Lines、Word、Chars、Payload

編號、響應狀態碼、響應報文行數、響應報文字數、響應報文正字符數、Payload

 

 

看看wfuzz一共的參數

 

 

 

 

 

 

 

 

 

 

 

 

0x02 常用參數使用

 --hc,--hl,--hw,--hh參數可以隱藏某些HTTP響應。

 

--hc 

根據響應報文狀態碼進行隱藏(hide code)

wfuzz -w wordlist --hc 404 https://www.cnblogs.com/-qing-/FUZZ

wfuzz -w wordlist --hc 404,403 https://www.cnblogs.com/-qing-/FUZZ

 

 

--hl

根據響應報文行數進行隱藏(hide lines)

 

--hw

根據響應報文字數進行隱藏(hide word)

 

--hh

根據響應報文字符數進行隱藏

 

 

 

 

wfuzz -w wordlist/general/common.txt --hc 404 http://datalayer.io/FUZZ
********************************************************
* Wfuzz 2.2 - The Web Fuzzer                           *
********************************************************

Target: http://datalayer.io/FUZZ
Total requests: 950

==================================================================
ID      Response   Lines      Word         Chars          Request
==================================================================

00000:  C=200    279 L       635 W         8972 Ch        "W3SVC3"
00001:  C=200    279 L       635 W         8972 Ch        "Log"
00002:  C=200    279 L       635 W         8972 Ch        "10"
00003:  C=200    279 L       635 W         8972 Ch        "02"
00004:  C=200    279 L       635 W         8972 Ch        "2005"
...
00024:  C=200    301 L       776 W         9042 Ch        "about"
...

 

仔細查看以上結果,可以很容易地確定所有“未找到”資源的共同點是279行,635個單詞和8972個字符。因此,我們可以使用以下信息來改進“ –hc 404”過濾器(可以組合使用各種過濾器):

$ wfuzz -w wordlist/general/common.txt --hc 404 --hh 8972  http://datalayer.io/FUZZ

00022:  C=200    301 L       776 W         9042 Ch        "about"
00084:  C=302      0 L         0 W            0 Ch        "blog"
00192:  C=302      0 L         0 W            0 Ch        "css"
...
00696:  C=200    456 L      1295 W        15119 Ch        "service"
00751:  C=200    238 L       512 W         6191 Ch        "store"
00788:  C=302      0 L         0 W            0 Ch        "text"
00913:  C=302      0 L         0 W            0 Ch        "template"

 

 

 

 

 

 

關於自定義wfuzz中的Baseline(基準線)

可以根據參考HTTP響應(稱爲“基準”)構建過濾器。例如,先前的使用–hh開關過濾“未找到”資源的命令可以通過以下命令完成:

$ wfuzz -w wordlist/general/common.txt --hh BBB  http://datalayer.io/FUZZ{notthere}
...
00000:  C=200    279 L       635 W         8972 Ch        "notthere"
00001:  C=200    301 L       776 W         9042 Ch        "about"
00004:  C=200    456 L      1295 W        15119 Ch        "service"
...

這裏的{}定義了此第一個HTTP請求的FUZZ字的值,然後可以使用將“ BBB”指定爲過濾器值的響應。

而這第一個請求被標記爲BBB(BBB不能換成別的)基準線;--hh,這裏就是以BBB這條請求中的Chars爲基準,其他請求的Chars值與BBB相同則隱藏

 

基準線基本使用就是這個意思 

 

 

 

 

 

 

正則表達式過濾器

 

顯示響應:

 

--sc(show code),--sl(show lines),--sw(show word),--sh (show chars)

 

--ss--hs可以使用正則表達式來對返回的結果過濾。

ss是show顯示  hs是過濾隱藏

舉個例子

wfuzz -H "User-Agent: () { :;}; echo; echo vulnerable" --ss vulnerable -w cgis.txt http://localhost:8000/FUZZ

過濾出有vulnerable字樣的返回

 

除了直接字符串肯定可以正則  

 

 

 

 

 

Wfuzz掃描的時候出現網絡問題,如DNS解析失敗,拒絕連接等時,wfuzz會拋出一個異常並停止執行使用

 -Z參數即可忽略錯誤繼續執行

 

 

 

 參數--conn-delay來設置wfuzz等待服務器響應接連的秒數。 參數--req-delay來設置wfuzz等待響應完成的最大秒數。

 

 

 

 

 

 

 

 

 

 

 

 

 

 0x03 基本使用wfuzz

 

 路徑或文件fuzz

$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ


$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ.php

 

 

url參數中的fuzz

wfuzz -z range,0-10 --hl 97 http://testphp.vulnweb.com/listproducts.php?cat=FUZZ

 

 

 

模糊POST請求

如果您想模糊一些表單編碼的數據(例如HTML表單),只需傳遞-d命令行參數即可:

 

wfuzz -z file,wordlist/others/common_pass.txt -d "uname=FUZZ&pass=FUZZ"  --hc 302 http://testphp.vulnweb.com/userinfo.php
********************************************************
* Wfuzz 2.2 - The Web Fuzzer                           *
********************************************************

Target: http://testphp.vulnweb.com/userinfo.php
Total requests: 52

==================================================================
ID      Response   Lines      Word         Chars          Request
==================================================================

00044:  C=200    114 L       356 W         5111 Ch        "test"

Total time: 2.140146
Processed Requests: 52
Filtered Requests: 51
Requests/sec.: 24.29739

 

 

 攜帶Cookie進行測試

要將自己的cookie發送到服務器,例如,將請求與HTTP會話相關聯,可以使用-b參數(對各種cookie重複):

$ wfuzz -z file,wordlist/general/common.txt -b cookie=value1 -b cookie2=value2 http://testphp.vulnweb.com/FUZZ

-b參數指定Cookie,多個Cookie需要指定多次

上面的命令將生成HTTP請求,例如以下請求:

GET /attach HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Content-Type:  application/x-www-form-urlencoded
Cookie:  cookie=value1; cookie2=value2
User-Agent:  Wfuzz/2.2
Connection: close

 

 

 

 

提交請求頭

wfuzz -z file,wordlist/general/common.txt -H "myheader: headervalue" -H "myheader2: headervalue2" http://testphp.vulnweb.com/FUZZ

 

上面的命令將生成HTTP請求,例如以下請求:

GET /agent HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Myheader2:  headervalue2
Myheader:  headervalue
Content-Type:  application/x-www-form-urlencoded
User-Agent:  Wfuzz/2.2
Connection: close

 

 

cookie和頭都是可以fuzz的 不多說了

 

 

 

 

fuzz HTTP請求方法

wfuzz -z list,"GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/

 

-z list可以自定義一個字典列表(在命令中體現),以-分割;-X參數是指定HTTP請求方法類型

wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
********************************************************
* Wfuzz 2.2 - The Web Fuzzer                           *
********************************************************

Target: http://testphp.vulnweb.com/
Total requests: 5

==================================================================
ID      Response   Lines      Word         Chars          Request
==================================================================

00002:  C=200      0 L         0 W            0 Ch        "HEAD"
00004:  C=405      7 L        12 W          172 Ch        "TRACE"
00005:  C=405      7 L        12 W          172 Ch        "OPTIONS"
00001:  C=200    104 L       296 W         4096 Ch        "GET"
00003:  C=200    104 L       296 W         4096 Ch        "POST"

Total time: 1.030354
Processed Requests: 5
Filtered Requests: 0
Requests/sec.: 4.852696

 

如果要使用特定動詞執行請求,則也可以使用“ -X HEAD”。

 

 

 

 

 

代理

如果需要使用代理,只需使用-p參數:

做測試的時候想使用代理可以使用如下命令:

wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ

wfuzz -z file,wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ

 

-p參數指定主機:端口:代理類型,例如我想使用ssr的,可以使用如下命令:

wfuzz -w wordlist -p 127.0.0.1:1087:SOCKS5 URL/FUZZ

除了基本的HTTP代理外,Wfuzz還支持使用SOCKS4和SOCKS5協議的代理:

$ wfuzz -z file,wordlist/general/common.txt -p localhost:2222:SOCKS5 http://testphp.vulnweb.com/FUZZ

通過提供各種-p參數,可以同時使用多個代理: $ wfuzz -z file,wordlist/general/common.txt -p localhost:8080 -p localhost:9090 http://testphp.vulnweb.com/FUZZ

每次將使用不同的代理執行每個請求。

多個代理可使用多個-p參數同時指定,wfuzz每次請求都會選取不同的代理進行。

 

 

 

 

 

認證

Wfuzz可以使用

–basic / ntlm / digest

命令行開關來設置身份驗證標頭。

例如,可以使用以下命令對使用基本身份驗證的受保護資源進行模糊處理:

 

 

HTTP Basic Auth保護的內容可使用如下命令:

wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx
********************************************************
* Wfuzz 2.2 - The Web Fuzzer                           *
********************************************************

Target: https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx
Total requests: 2

==================================================================
ID      Response   Lines      Word         Chars          Request
==================================================================

00001:  C=401      0 L        11 W           58 Ch        "nonvalid"
00002:  C=200     20 L        91 W         5294 Ch        "httpwatch"

Total time: 0.820029
Processed Requests: 2
Filtered Requests: 0
Requests/sec.: 2.438938

如果您想模糊受保護網站的資源,也可以使用“ –basic user:pass”。

 

 

 

 

wfuzz可以通過--basec --ntml --digest來設置認證頭,方法都一樣:

--basec/ntml/digest username:password

 

 

 

 

 

 

 

 

 

 

 

關於遞歸

 

 

-R開關可用於指定有效負載遞歸的深度。例如,如果要搜索現有目錄,然後使用相同的有效負載在這些目錄中再次進行模糊測試,則可以使用以下命令:

$ wfuzz -z list,"admin-CVS-cgi\-bin"  -R1 http://testphp.vulnweb.com/FUZZ
********************************************************
* Wfuzz 2.2 - The Web Fuzzer                           *
********************************************************

Target: http://testphp.vulnweb.com/FUZZ
Total requests: 3

==================================================================
ID      Response   Lines      Word         Chars          Request
==================================================================

00003:  C=403     10 L        29 W          263 Ch        "cgi-bin"
00002:  C=301      7 L        12 W          184 Ch        "CVS"
|_ Enqueued response for recursion (level=1)
00001:  C=301      7 L        12 W          184 Ch        "admin"
|_ Enqueued response for recursion (level=1)
00008:  C=404      7 L        12 W          168 Ch        "admin - CVS"
00007:  C=404      7 L        12 W          168 Ch        "admin - admin"
00005:  C=404      7 L        12 W          168 Ch        "CVS - CVS"
00006:  C=404      7 L        12 W          168 Ch        "CVS - cgi-bin"
00009:  C=404      7 L        12 W          168 Ch        "admin - cgi-bin"
00004:  C=404      7 L        12 W          168 Ch        "CVS - admin"

 

遞歸深度爲1也就是說當發現某一個目錄存在的時候,在存在目錄下再遞歸一次字典。

 

 

 

 

 

 

 

 

 

 

性能(設置間隔線程)

 -t   開關增加或減少併發請求的數量,以使攻擊進行得更快或更慢。

 -s    參數告訴Wfuzz在執行另一個請求之前停止給定的秒數。

 

 

 

 

 

 

 

 

 

寫入文件

Wfuzz支持將結果以其他格式寫入文件。

wfuzz通過printers模塊來將結果以不同格式保存到文檔中,一共有如下幾種格

$ wfuzz -e printers

例如,要將結果以JSON格式寫入輸出文件,請使用以下命令:   -f  參數

$ wfuzz -f /tmp/outfile,json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

 

 

使用-f參數,指定值的格式爲輸出文件位置,輸出格式

 

 

 

不同的輸出

Wfuzz支持以各種格式顯示結果。這由稱爲“打印機”的插件執行。可以列出可用的打印機,執行:

$ wfuzz -e printers

例如,要以JSON格式顯示結果,請使用以下命令:

$ wfuzz -o json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

 

 

 

 

 

 

 

 

 

0x04 高級用法 --wfuzz模塊

wfuzz默認自帶模塊5種類型分別是:payloadsencodersiteratorsprintersscripts

 

 

 

payloads

通過-e參數可以查看指定模塊類型中的模塊列表:

wfuzz -e payloads

 

 

 

Available payloads:
  Name            | Summary                                                                           
------------------------------------------------------------------------------------------------------
  guitab          | 從可視化的標籤欄中讀取請求                                
  dirwalk         | 遞歸獲得本地某個文件夾中的文件名                            
  file            | 獲取一個文件當中的每個詞                                                    
  autorize        | 獲取autorize的測試結果Returns fuzz results' from autororize.                                            
  wfuzzp          | 從之前保存的wfuzz會話中獲取測試結果的URL                   
  ipnet           | 獲得一個指定網絡的IP地址列表                                        
  bing            | 獲得一個使用bing API搜索的URL列表 (需要 api key).                   
  stdin           | 獲得從標準輸入中的條目                                                
  list            | 獲得一個列表中的每一個元素,列表用以 - 符號分格                       
  hexrand         | 從一個指定的範圍中隨機獲取一個hex值                                  
  range           | 獲得指定範圍內的每一個數值                                          
  names           | 從一個以 - 分隔的列表中,獲取以組合方式生成的所有usernames值
  burplog         | 從BurpSuite的記錄中獲得測試結果                                             
  permutation     | 獲得一個在指定charset和length時的字符組合                             
  buffer_overflow | 獲得一個包含指定個數個A的字符串.                    
  hexrange        | 獲得指定範圍內的每一個hex值                                   
  iprange         | 獲得指定IP範圍內的IP地址列表                                 
  burpstate       | 從BurpSuite的狀態下獲得測試結果

 

 

 

關於payloads的更詳細的信息可以通過以下命令獲取:

wfuzz -z help

 

 

–slice 參數來對輸出結果進行過濾:

 

 

 

 

 

 

 

encoder

encoder將payload進行編碼或加密。

 

Available encoders:
  Category      | Name                      | Summary                                                                           
------------------------------------------------------------------------------------------------------------------------
  url_safe, url | urlencode                 | 用`%xx`的方式替換特殊字符, 字母/數字/下劃線/半角點/減號不替換
  url_safe, url | double urlencode             | 用`%25xx`的方式替換特殊字符, 字母/數字/下劃線/半角點/減號不替換
  url              | uri_double_hex            | 用`%25xx`的方式將所有字符進行編碼
  html          | html_escape                | 將`&`,`<`,`>`轉換爲HTML安全的字符
  html            | html_hexadecimal             | 用 `&#xx;` 的方式替換所有字符
  hashes         | base64                    | 將給定的字符串中的所有字符進行base64編碼
  url             | doble_nibble_hex             | 將所有字符以`%%dd%dd`格式進行編碼
  db             | mssql_char                | 將所有字符轉換爲MsSQL語法的`char(xx)`形式
  url             | utf8                        | 將所有字符以`\u00xx` 格式進行編碼
  hashes         | md5                         | 將給定的字符串進行md5加密
  default         | random_upper                | 將字符串中隨機字符變爲大寫
  url             | first_nibble_hex          | 將所有字符以`%%dd?` 格式進行編碼
  default         | hexlify                    | 每個數據的單個比特轉換爲兩個比特表示的hex表示
  url             | second_nibble_hex         | 將所有字符以`%?%dd` 格式進行編碼
  url             | uri_hex                     | 將所有字符以`%xx` 格式進行編碼
  default         | none                         | 不進行任何編碼
  hashes         | sha1                        | 將字符串進行sha1加密
  url             | utf8_binary                | 將字符串中的所有字符以 `\uxx` 形式進行編碼
  url             | uri_triple_hex             | 將所有字符以`%25%xx%xx` 格式進行編碼
  url             | uri_unicode                | 將所有字符以`%u00xx` 格式進行編碼
  html             | html_decimal                | 將所有字符以 `&#dd; ` 格式進行編碼
  db             | oracle_char                | 將所有字符轉換爲Oracle語法的`chr(xx)`形式
  db             | mysql_char                 | 將所有字符轉換爲MySQL語法的`char(xx)`形式

 

正常使用:

  • wfuzz -z file --zP fn=wordlist,encoder=md5 https://www.cnblogs.com/-qing-/FUZZ

    使用Encodersmd5加密。

  • wfuzz -z file,wordlist,md5 URL/FUZZ

    這裏簡寫了第一條命令,一般都使用這條命令來調用Encoders

使用多個Encoder:

  • 多個轉換,使用一個-號分隔的列表來指定

    wfuzz -z file,dict.txt,md5-base64 https://www.cnblogs.com/-qing-/FUZZ

 

--zE md5 同樣的

 

wfuzz -z file --zP fn=qing.txt,encoder=md5 https://www.cnblogs.com/-qing-/FUZZ

 

 

 

wfuzz -z file --zP fn=qing.txt,encoder=md5-base64 https://www.cnblogs.com/-qing-/FUZZ

 

 

 

 

 

 多次轉換的話使用一個@號分隔的列表來按照從右往左順序多次轉換

wfuzz -z file --zP fn=qing.txt,encoder=md5@base64 https://www.cnblogs.com/-qing-/FUZZ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

iterator

類似bp中的intruder

提供payload的處理方式

 使用參數

-m 迭代器

wfuzz自帶的迭代器有三個:zipchainproduct,如果不指定迭代器,默認爲product迭代器。

zip迭代器的功能:字典數一一對應進行組合  

chain迭代器的功能將所有字典全部整合(不做組合)放在一起然後傳入佔位符FUZZ中。

product迭代器的功能:payload交叉組合 笛卡爾積 和bp裏的炸彈一樣的

wfuzz -e iterators

Available iterators:

Name    | Summary
----------------------------------------------------------------------------------------------
product | Returns an iterator cartesian product of input iterables.
zip     | Returns an iterator that aggregates elements from each of the iterables.
chain   | Returns an iterator returns elements from the first iterable until it is exhaust
        | ed, then proceeds to the next iterable, until all of the iterables are exhausted

 

 

 

 

 

 

 

 

printer

 

 

 

 

 

 

 

 

scripts

 

 

 

一般分爲兩類:

  • passive被動:被動腳本分析現有請求和響應,而不執行新請求。
  • active主動:主動腳本嚮應用程序執行新請求,以對其進行漏洞探測。

其他類別是:

  • discovery發現:發現插件通過自動將發現的內容排入wfuzz請求的池來幫助爬網網站。

 

 

 

 

當使用–script參數以及所選插件時,將指示掃描模式。可以按類別或名稱選擇插件,也可以使用通配符。

-A開關是–script = default的別名。

腳本的詳細信息可以使用–scrip-help獲得,例如:

 

 

使用簡單腳本 比如robots腳本插件  解析robots.txt中的目錄

wfuzz --script=robots -z list,"robots.txt" https://www.cnblogs.com/-qing-/FUZZ

list是告訴wufzz請求哪個文件

 

 

 

 

 

 

 

爲了不再重複掃描相同的請求(具有相同的參數),有一個緩存,可以使用–no-cache標誌禁用緩存。

 

 

 

使用wfuzz可以自己編寫wfuzz插件

/.wfuzz/scripts/目錄

以參考已有的插件:https://github.com/xmendez/wfuzz/tree/master/src/wfuzz/plugins/scripts

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章