今天要介紹Intruder中的Attack type跟Payloads,
這個地方內容有點多,但也覺得說應該要介紹一下,
不太能夠草率的帶過,就特別拉了一天出來專門說這個。
Intruder可以進行的攻擊與測試組合方式真的不少,
有時候不是Intruder辦不到,
而是你不知道原來Intruder可以辦得到。
首先是Positions下的Attack type,
總共有四種的攻擊模式,
分別為sniper、Battering ram、Pitchfork、cluster bomb。
今天為了比較方便說明,
我將登入部分的帳號與密碼皆設為變數,
初始值帳號我用admin,密碼password0000。
如下圖的設定:
第一種攻擊模式: Sniper
sniper的特點是只需要指定一個Payload Set,
不管你Positions中有幾個變數,都是一個Payload Set,
但會針對每個變數逐項的替換。
在替換第一個位置變數的時候,第二個是不會動的,
也就是替換第一個位置的時候,第二個會是原始值,
而測試完第一個位置時,才會測試二個位置。
所以假設嘗試替換帳號密碼,
利用Payload內容是11,22,33,aa,bb,cc
進行暴力破解時,會去嘗試:
admin:11
admin:22
admin:33
admin:aa
admin:bb
admin:cc
11:password0000
22:password0000
… 這樣依序下去
欄位中Position的意思是表示第幾個變數,因為我們只有設定兩個,
帳號§admin§就是position 1,而密碼§password0000§就是position 2。
demo如下圖:
第二種攻擊模式: Battering ram
這種攻擊模式實際上比第一種還好理解,
也是不管你Positions中有幾個變數,都是一個Payload Set。
並且每個變數位置的值都會是一樣的。
所以假設嘗試替換帳號密碼,
帳號利用檔案內容是11,22,33,aa,bb,cc
進行暴力破解時 會去嘗試
11:11
22:22
33:33
aa:aa
… 這樣依序下去
demo如下圖:
第三種攻擊模式: Pitchfork
不能只輸入一個字典,每個變數要有自己的字典檔,
也就是說每個變數有一個屬於自己的Payload set,
但是要注意的是每個Payload set裡面的payload個數要一樣。
(當然其實payload set不一樣也是沒關係,還是可以執行,
只是多出來的那些payload不會被送出去而已。)
假設兩個Position各有自己的Payload Set,
Position 1,也就是帳號的地方,Payload是11,22,33
Position 2,也就是密碼的地方,Payload是aa,bb,cc
嘗試結果會是
11:aa
22:bb
33:cc
demo如下圖:
第四種攻擊模式: Cluster bomb
這種方式也是每個變數都要輸入字典,
但是不會像Pitchfork是一對一的關係,
而是每個都會去嘗試到,逐項地去嘗試一多對的方式。
假設兩個Position各有自己的Payload Set,
Position 1,也就是帳號的地方,Payload是11,22,33
Position 2,也就是密碼的地方,Payload是aa,bb,cc
嘗試結果會是
11:aa
11:bb
11:cc
22:aa
22:bb
…
demo如下圖:
介紹完了四種Attack Mode之後,
要來提的就是Payload type,
雖然我們前面用的Payload type都是Simple list,
(實務上最常用到的通常也是Simple list就是了)
不過Burp所支援的Payload type可是相當的多樣化。
首先Simple list可以算是最基本的,
用法很簡單,可以直接輸入按Add,也可以匯入檔案。
雖然這邊我們demo都是手動輸入,
不過實際上要執行暴力破解等動作,
通常Payload一定會是很大量的,
用手輸入可是會打到手指骨折,
所以實務上都是用匯入字典檔的方式居多囉。
那至於字典檔要去哪裡找,
就...自己到處隨便用關鍵字找找囉,
因為滿多地方都有各種不同的字典的或是Payload檔案。
談起Payload與字典檔可能又會無限發散,
這邊就隨便放個SecLists讓大家參考參考:
https://github.com/danielmiessler/SecLists/tree/master/Passwords
Runtime file 是指定檔案,
讓你直接選擇檔案,每一行就是一個Payload,
其實這個跟Simple list直接Load就是一樣的意思而已,
只是Simple list如果匯入的檔案很大,
會因為畫面要顯示出來給你看,所以會跑很久,
Runtime file沒有要顯示給你看,所以沒這個問題。
Custom iterator這個稍微就有點小複雜了,
首先先注意到這邊裡面也有個Position 1~8
8個都可以輸入不同的Payload Set,
也就是說八個之間會去做排列組合,
但是前後的順序不會改變,
最後的結果 = position1 + position2 + position3
為了方便demo,用的是Battering ram攻擊模式,
Payload的Position
Position 1: 11,22,33
Position 2: aa,bb,cc
Position 3: dog,cat
最後執行的payload會是:
11aadog
22aadog
33aadog
11bbdog
22bbdog
...
以此類推總共18組payload
Character substitution 字元替換的意思,
也就是你可以設定把某個字元修改成另一個字元,
其實可以算還是會從原本Simple list去延伸,
所以看到item的地方跟Simple list一樣。
跑完原本的Payload之後會做字元的替換。
所以假設我的payload輸入abcd,
可以看到字元替換的規則有a->4,b->8
所以暴力破解時送完原始的payload abcd之後
有單獨把a換成4,有單獨把b換成8,也有兩個都換的。
Recursive grep 其實聽起來有點複雜,
但是其實沒那麼複雜XD 可是我沒好的範例demo。
是從前次的回應結果中,
取得部分特定內容作為下次請求的Payload。
這個我也是第一次發現原來Burp還有這一招,
利用Illegal Unicode進行Bypass。
因為不是很理解,讓我先默默跳過...
Character blocks,
舉例,可以插入很多個A,起始要幾個,
每次增加多少個A,到多少個要停止,
通常比較適用在測試overflow。
Number測試數字,這個也算是實務上很常用到的,
可以設定起始多少到結尾多少,間隔多少數字,
也可以選擇十進位與Hex,還有是否要小數點。
如其名,就是用來測時間日期格式的Payload。
Brute Force是純粹的暴力破解,
這個其實算是我除了Simple與Number以外,
可能比較常用到的之一,
Payload的產生方式就是Character set中的所有字元排列組合都會試過,
那也可以設定最小的長度與最大的長度,
不過要注意就是Brute Force很容易一不小心Payload數量就超多的。
Null payloads 其實就是重複同樣的原始請求,沒有進行修改,
你可能會好奇這樣有甚麼意義?!
那這個就是等到你遇到需要的場景就會知道意義了XD,
通常可能是做觀察與蒐集數據的時候用啦,
譬如要確認一值重複丟一樣的請求,是否伺服器都會給一樣的回應。
Character frobber 會依序去遞增每個字元的一個ASCII,
感覺這個有點冷門,好像其實是滿實用的,
用途主要應該是是用來確認token的每個字元是否有作用。
剩下的因為時間壓力的關係,加上我根本幾乎沒用過的關係XD
就真的草率的帶過一下了:
Bit flipper 會對預設的payload,按照bits去翻轉。
Username generator 對單字進行變形猜測。
ECB block shuffler 牽扯到加密模式,先不管他。
講完Payload type之後,Payload下還有兩個區塊,
必須要提一下,姑且不管你有沒有要用的,至少先知道。
Payload Processing,是也可以對發出去的Payload進行加工處理,
例如可以加入前置、後墜字元,後墜常見的可能像是Email的結果,@gmail.com之類的。
可以利用match替換,可以反轉,可以編碼,許多方法可以選擇。
最下面的Payload Encoding,
這邊則是勾選的話,Payload如果有match的characters就會進行URL-encode。
最後小結一下,
我自己覺得會比較常用的payload type是
Simple, Number, Brute Force,
當然每種都有各自的優點與適合的場景,
Burp支援了這麼多種的Payloads type,
不同的攻擊模式,還可以對Payload進行加工,
真的是很建議可以好好學好Burp Suite中的Intruder。