iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
Security

仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄系列 第 4

[DAY4]仿生人是否會夢見網頁山羊?--ffuf功能及ATTACK mode介紹

  • 分享至 

  • xImage
  •  

為了能知道網頁山羊喜歡吃甚麼,仿生人在羊圈內設了一個高速自動餵食機,希望能以此測試出網頁山羊喜歡的食物特徵

如同昨天提到的,由於Burp Suite Community的intruder發送一定量封包後會開始減速,且有可能導致虛擬機當機,所以我要來介紹ffuf這個我認為更好用一些的工具
這篇介紹主要會介紹怎麼使用ffuf發送封包,以及其中例如Sniper attack mode, cluster bomb attack mode是什麼。

ffuf使用

ffuf和burp suite的intruder使用方法不太一樣,不是只要點幾個按鈕就會開始運作了,而是使用了CLI(命令列語言),這也代表我們想使用他時除了要準備好字典(想要輸入的東西),也得稍微學會怎麼樣改一些參數
此外,這次示範會選擇用比較簡單,使用現成封包範例的方式

封包準備

  1. 開啟Burp Suite和Webgoat,同時確認代理是否有正常運作
  2. 正常登入Webgoat

這樣的話,照理來說我們就會有一個現成的,可以用來登入Webgoat的封包,以及成功登入時Webgoat應該要回傳什麼的範例

https://ithelp.ithome.com.tw/upload/images/20260917/20184109aa1uSkDQZJ.png

  1. 把左邊Request的內容全部複製,並且貼到txt檔後儲存
  2. 將封包內你想要ffuf幫你填的部分(username或者是password)原先的內容改成提示詞

https://ithelp.ithome.com.tw/upload/images/20260917/20184109pmKpTwL30o.png

這樣,我們便有一個等等可以拿來使用的封包模板了

字典庫製作

由於ffuf強制一定要使用字典,並且想當然ffuf本身不會有符合我們webgoat帳號密碼的字典,所以我們要自己創一個
把剛剛選擇的提示詞內原本應該要有的內容打進txt並且儲存

https://ithelp.ithome.com.tw/upload/images/20260917/201841097lbKbQU2dG.png

這樣,我們就做好等等要用到的字典表了

正式使用

前置準備做好啦! 現在我們就要正式讓ffuf幫我們進行登入嘗試了,一樣使用Burp Suite的proxy來進行確認
打開ffuf,並在指令內輸入

ffuf -request 封包模板檔案路徑(如/home/kali/Downloads/TEST.txt) -request-proto HTTP -w 字典庫檔案路徑:提示詞(如/home/kali/Downloads/PASSWORD.txt:PASSWORD) -x http://127.0.0.1:8081

如果上面做的都正確的話 應該會看見proxy中多了這個POST

https://ithelp.ithome.com.tw/upload/images/20260917/20184109ZRv2eiQoCP.png

看到了嗎? 和我們一開始不管是傳送的,還是WebGoat回傳的基本上都一模一樣

接下來,我們來講解一下剛剛的指令到底都讓ffuf做了些什麼
-request 告訴ffuf我們要使用這種現成封包的方式進行測試
-request-proto 告訴ffuf我們要連的網站是用哪一種傳輸協定(HTTP或HTTPS),避免ffuf進行不必要的加密,因為有些版本的ffuf連線時可能會預設是HTTPS

https://ithelp.ithome.com.tw/upload/images/20260917/20184109drhRYS5f7l.png

如果不這麼做的話,http的網頁會因為看不懂我們到底傳了甚麼鬼,所以直接拒絕回應或中斷連線
-w 告訴ffuf我們把字典放在哪裡了,以及讓他知道看到哪個提示詞時就代表那裏需要他自動填入
-x 告訴ffuf發送以及接收到封包時記得經過某個網址和指定的port,讓我們的Burp Suite可以監聽到封包信息

看到這裡,就代表我們已經學會使用ffuf進行簡易的封包發送了!

ATTACK MODE介紹

接下來就要來介紹ffuf和Burp Suite intruder的ATTCK MODE啦!,個人感覺比較有趣的是Burp Suite Intruder有內建4種模式,ffuf只有3種,但其實ffuf本身也可以直接做到那個第四種方式

Sniper ATTACK (Burp Suite和ffuf都有)

Sniper attack 就像他的名字一樣,本身只會使用一個字典表並專注於一個參數的變化,若有多個參數則會先跑完第一個參數後再跑第二個,以此輪換,適合用在單一參數的精準測試

個人感覺要用簡單的話來講的話.......其實就是單個for迴圈(?,如果有一個以上的參數的話,就會在後面再多加更多的單層for迴圈
用java簡單表示的話應該會長這樣

for(int A=0; A<字典表陣列A.size(); A++){
    System.out.println(字典表陣列A.get(A));
}
for(int B=0; B<字典表陣列B.size();B++){
    System.out.println(字典表陣列B.get(B));
}
//...以此類推

Battering RAM ATTACK (Burp Suite獨有,但其實fuff本身也能做到)

類似於Sniper和等等要介紹的Pitch Fork attack mode的融合,本身只會使用到一個字典,會把一個字典同時填入不同的輸入位置,所以ffuf其實只要在不同地方填入相同的提示詞就行了,適合用在例如某些機構會把首次登入密碼設為使用者名稱=密碼的情況

用java簡單表示的話應該會長這樣

for(int A=0;A<字典表陣列A.size();A++){
    System.out.println("輸入框1:"+字典表陣列A.get(A)+
                       "輸入框2:"+字典表陣列A.get(A)+
                       //......
                       "輸入框∞:"+字典表陣列A.get(A));}

PitchFork ATTACK (Burp Suite和ffuf都有)

跟剛剛的Battering RAM長得很像,但不同的是它會用到兩個以上的字典表,適合用在需要對齊的輸入,例如使用者A要對齊使用者A的密碼,使用者B要對齊使用者B的密碼......以此類推,需要注意的是只要其中一個字典表跑完的話就會直接停止
用java簡單表達的話應該是會長這樣

for(int A=0; A<所有字典表陣列中長度最短的.size();A++){
    System.out.println("輸入框1:"+字典表陣列A.get(A)+
                       "輸入框2:"+字典表陣列B.get(A)+
                       // ......
                       "輸入框∞:"+字典表陣列∞.get(A));}

Cluster Bomb ATTACK (Burp Suite和ffuf都有)

使用笛卡兒積,會用到兩個以上的字典表,也正如其名,會像集束炸彈一樣進行地毯式的進行代入,幾乎所有的組合都會被試過一次,也因此他的嘗試數基本上是用乘來計算的,適合用來暴力破解,
用java進行簡單講解的話會長這樣

for(int A=0; A<輸入框1指定的字典表陣列.size();A++){
    for(int B=0; B<輸入框2指定的字典表陣列.size();B++){
        ......有多少輸入框就有多少層
            for(int Z=0; Z<輸入框∞指定的字典表陣列.size();Z++){
                System.out.println("輸入框1:"+輸入框1指定的字典表陣列.get(A)+
                                   "輸入框2:"+輸入框2指定的字典表陣列.get(B)+
                                    //......+
                                   "輸入框∞:"+輸入框∞指定的字典表陣列.get(Z));
        }
    }

以上,便是我這次對於ffufATTACK mode的介紹,需要注意的是,上面所寫的只是為了方便理解寫的簡易程式碼,真的實作起來應該不會長這樣

明日內容:開始解Webgoat SQL injection!


上一篇
[DAY3]仿生人是否會夢見網頁山羊?--Burp Suite配置及功能介紹
下一篇
[DAY5]仿生人是否會夢見網頁山羊? --SQL基本指令
系列文
仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言