前言:
fuzzing是可以用在目錄和參數的暴力破解當中的一種測試技術我們會發送隨機的特殊字符或是字串並且去觀察伺服器的反應
可以發現系統軟體中的編碼錯誤或是安全性漏洞,測試的過程當中會使用大量的隨機數據,然而一般來說會搭配字典檔進行測試,所以稱之為「模糊測試」。
例如:
https://websec.one/htb-fuzzing/ 因為頁面真實存在,所以會得到200的HTTP 代碼
https://websec.one/notexist ,因為頁面不存在,所以會得到404的HTTP 代碼
Basic Fuzzing
Directory Fuzzing:
安裝:
apt install ffuf -y
使用字典檔案進行掃描:
$ ffuf -w <WordlistPath>:FUZZ -u http://domain:port/FUZZ 範例: $ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ http://167.172.58.213:31537:80/FUZZ
掃描得到了 “forum” 和 “blog”兩個目錄,可惜的是我們沒辦法直接訪問會出現一片空白
但是這並不代表我們沒有權限訪問,因為HTTP code是200
所以下一步可以針對目錄做一次”Extension Fuzzing”
Extension Fuzzing:
使用副檔名檔案進行掃描:
$ ffuf -w <WordlistPath>:FUZZ -u http://domain:port/Dir/FilenameFUZZ 範例: $ ffuf -w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://167.172.58.213:31537/blog/indexFUZZ
掃描到了 “php” 和 “phps”仔細看”php” 是 200
現在有了目錄和副檔名,就可以進行 “Page Fuzzing” 找出實際存在的那個頁面
Page Fuzzing:
$ ffuf -w <WordlistPath>:FUZZ -u http://domain:port/Dir/FUZZ.php 範例: $ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://167.172.58.213:31537:port/blog/FUZZ.php
掃描到了兩個檔案,分別是index和home,但是index的大小是0表示它是一個空頁面
可以訪問看看home.php頁面,那裏面就是目標頁面了!
Recursive Fuzzing:
如果網站當中有幾十個目錄,各個目錄底下又有自己的子目錄和文件這樣用前面的方法掃描完會花費非常多的時間,下面這邊可以利用”recursive fuzzing”。
$ ffuf -w <WordlistPath>:FUZZ -u http://domain:port/FUZZ -recursion -recursion-depth 1 -e .php -v 範例:$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://167.172.58.213:31537/FUZZ -recursion -recursion-depth 1 -e .php -v 2>/dev/null
掃描到了 /forumn/flag.php ,這個檔案非常可疑~果然打開就是目標的flag了
Domain Fuzzing:
DNS Records:
$ sudo sh -c 'echo "SERVER_IP academy.htb" >> /etc/hosts' 範例: $ sudo sh -c 'echo "167.172.58.213 academy.htb" >> /etc/hosts'
Sub-domain Fuzzing:
$ ffuf -w <WordlistPath>:FUZZ -u https://FUZZ.domain/ 範例: $ ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u https://FUZZ.hackthebox.eu/
host Fuzzing:
在很多情況下很多網站都有不公開的子域名,也就是說沒有發布在公開的DNS上,所以說我們沒辦法直接連線該網站
可以透過修改hosts的方式連線,但如果每次要掃描都要改會有點麻煩,在ffuf裡面可以使用 -h參數達到跟修改host一樣的效果
$ ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://domain:PORT/ -H 'Host: FUZZ.domain'
Filtering Results:
ffuf -h 可以看到說明手冊,這邊擷取較為重要的部分
Parameter Fuzzing:
有些網頁會透過GET參數來驗證身分,例如admin/admin.php?user=admin
網站就會判斷使用者為管理者,不過這類的漏洞是比較少見的。
下面會介紹GET和POST的模糊測是用法
Parameter Fuzzing – GET:
舉例: http://167.172.58.213 : 30035/admin/admin.php?param1=key
這邊需要把”param1″替換成FUZZ進行掃描,可以用這個字典檔 SecLists/Discovery/Web-Content/burp-parameter-names.txt
後的的Filtering可以自己決定要不要加上
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://domain:PORT/admin.php?FUZZ=key -fs xxx
Parameter Fuzzing – POST:
GET和POST的區別在於沒辦法在 “?” 後面傳送參數
-X POST : 代表使用POST方法
-d ‘FUZZ=key’ : 要進行測試的FUZZ參數
-H ‘Content-Type: application/x-www-form-urlencoded’ : POST的標頭
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://domain:PORT/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx
有了post參數之後,可以透過curl去察看網頁內容
$ curl http://domain:PORT/admin/admin.php -X POST -d 'id=key' -H 'Content-Type: application/x-www-form-urlencoded' //key:填入POST參數
思路整理:
1.先針對目標站點進行虛擬主機(vhost)子域名掃描,從其他子域名找機會,若是有找到子域名要記得新增到自己的hosts裡面才能使用。
範例: ‘*.academy.htb’ 進行虛擬主機(vhost)子域名的掃描。
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://domain:PORT/ -H 'Host: FUZZ.academy.htb' -ms 0
2.針對剛剛拿到的子域名進行Directory Fuzzing。
範例: 假設剛剛拿到的faculty這個子域名,然後再進行Directory Fuzzing。
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://faculty.domain:PORT/FUZZ
3.掃描看看機器上有哪些副檔名,以剛剛掃描到的目錄為例。
範例:假設剛剛拿到的courses這個目錄名稱,掃描看看該目錄底下有哪些副檔名的index
ffuf -w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://faculty.domain:PORT/courses/indexFUZZ
4.有了副檔名之後再掃描看看該目錄底下有哪些頁面
範例:假設剛剛拿到的副檔名為php7,掃描看看該目錄底下有哪些檔名
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://faculty.domain:PORT/courses/FUZZ.php7
5.如果有發現無法訪問並且看起來很像有敏感資料的頁面,嘗試看看GET和POST Fuzzing。
範例:假設剛剛拿到的檔名為linux-security.php7,掃描看看有沒有參數可以看到不同的頁面
GET: ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://faculty.domain:PORT/courses/linux-security.php7?FUZZ=key POST: ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://faculty.domain:PORT/courses/linux-security.php7 -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded'