今天繼續來把 Attack Type 給補完,順便補充昨天沒講到的幾個 Payload 設定。
昨天沒講到 Payload Type 選項,這邊我簡單介紹幾項。
這個就是我這次介紹時用的選項,這個選項特別的是自訂性很高 ( 因為全部都是自己輸入 ),可以輸入一些字典檔沒有但自己常常拿來測的字元。
Simple list 中還有一個 Payload Processing 可以再送出請求前對 Payload 做處理像是下面表格裡面的這樣。
| Processing rule | 用途 | 範例 |
|---|---|---|
| Add prefix | 前面加字串 | admin → user_admin |
| Add suffix | 後面加字串 | admin → admin123 |
| Match / Replace | 找字串並取代 | hello world → hello_world |
| Substring | 只取 Payload 一部分 | abcdef → abc |
切換成 Numbers 後下面的介面就會變成這樣,最直觀的是可以限定一個數字範圍來做測試,可以用來測試 id . 頁碼 等等的參數。
From : 開始的數字。
To : 結束的數字。
Step : 可以決定每一次 Payload 間隔的數字。
例子 :
從 1 開始慢慢遞增到 50 結束。
From : 1
To : 50
Step : 1
如同字面意思沒有 Payload,一直重複寄一樣的請求,可以設定要重複幾次,用來觀察狀態變化。
從檔案即時抓 Payload 來測,適合要測試的 Payload 很多或已經自己有整理好的情況。
昨天只講到 Sniper 針對一個 Position 時的用法,沒有提到如果是有大於一個 Position 時怎麼處理。
當 Position 大於一個時,Burp 會依序把 每一個Position都測試過每一個Payload 。
Position 是指會被替換成 Payload 的位置,這篇文章就都直接用 Position 來代稱。
Payload 有五個分別是 a . b . c . d . e 。
Position 有三個分別是 id . name . role 。
請求 :
/login?id=100&name=alice&role=normal
測試內容就會像這樣 ( 請求數量 = Position 數量 x Payload 數量 )。
id = a , name = alice , role = normal
id = b , name = alice , role = normal
id = c , name = alice , role = normal
id = d , name = alice , role = normal
id = e , name = alice , role = normal
id = 100 , name = a , role = normal
id = 100 , name = b , role = normal
id = 100 , name = c , role = normal
id = 100 , name = d , role = normal
id = 100 , name = e , role = normal
id = 100 , name = alice , role = a
id = 100 , name = alice , role = b
id = 100 , name = alice , role = c
id = 100 , name = alice , role = d
id = 100 , name = alice , role = e
今天用來演示的靶機是 Lab: Basic SSRF against another back-end system。
請求的封包長這樣,由於封包裡面的 stockAPI 後面的網址是有被編碼過的所以不太好看出來實際的樣子。
我設定了兩個 Position 分別是在 productId 跟 storeId。
http://192.168.0.1:8080/product/stock/check?productId=§1§&storeId=§1§

Payload 的部分我是設定了五個。
1
2
3
4
5
Request count 由於有兩個 Position 所以會有 2 ( Position ) x 5 ( Payload ) 請求。
結果可以看到 Intruder 送出了 10 個 request。
Battering ram 是直接 將一個Payload塞進所有的Position ,直接用例子說明。
Payload 有五個分別是 a . b . c . d . e 。
Position 有三個分別是 id . name . role 。
請求 :
/login?id=100&name=alice&role=normal
測試內容就會像這樣 ( 請求數量 = 1 x Payload 數量 )。
id = a , name = a , role = a
id = b , name = b , role = b
id = c , name = c , role = c
id = d , name = d , role = d
id = e , name = e , role = e
跟上面 Sniper 的例子一樣 Position 跟 Payload 都一樣,只是 Battering ram 是同時一起用同一個Payload,所以只會送五個請求。
Payload :
1
2
3
4
5

可以看到每次的 Request ,兩個 Position 都是用同一個 Payload。
Pitchfork 跟前面兩者比較不同,一次是用 一組Payload放進對應的Position ,也就是說 Position 有幾個你就必須另外設計出幾個 Payload set。
id . name . role 。Payload 有三項分別是 id . name . role 每個都可以設定個別的 Payload set。id : 1 . 2 . 3 . 4 . 5 。name : alice . bob . casssidyrole : normal . admin
請求 :
/login?id=100&name=alice&role=normal
測試內容就會像這樣 ( 請求數量 = 1 x Payload 數量最少的一項 )。
id = 1 , name = alice , role = normal
id = 2 , name = bob , role = admin
不一定要每一項 Payload 數量都一樣,Intruder 會按照最少的 Payload 為基準去送請求,假設最少的一個 Payload set 只有 4 個 Payload 其他多餘的就都只會用到它們的前四個 Payload。
像上面的範例id有 5 個 Payload;user有 3 個 Payload;role有 2 個 Payload,最少的一項是role只有兩個就只會測到第二個 Payload。
Pitchfork 這邊封包一樣是沒什麼差異,也是兩個 Position。
Payload 的地方可以看到 Payload Position 的地方有選項可以選了,分別是 1-1 ( productId ) 跟 2-1 ( storeId )。
我這邊是把兩邊的 Payload 做了一點區隔
// 1-1 Payload
1
2
3
4
5
// 2-1 Payload
6
7
8
9
10
1-1 的 Payload :
2-1 的 Payload :
因為 Pitchfork 是兩個一組測用最少 Payload 為基準,兩邊的 Payload set 都是五個所以 Request count 是 5 。
結果 :
可以觀察出請求是按照順序。
1 搭配 6;2 搭配 7 ...... 。
Cluster bomb 跟 Pitchfork 一樣都是一組 Payload 放進對應的 Position,只是會嘗試 Payload 可能的排列組合,而不像 Pitchfork 只照順序測。
id . name 。Payload 有三項分別是 id . name 每個都可以設定個別的 Payload set。id : 1 . 2 . 3 . 4 . 5 。name : alice . bob . casssidy
請求 :
/login?id=100&name=alice
測試內容就會像這樣 ( 請求數量 = 第一個 Position 的 Payload 數量 x 第二個 Position 的 Payload 數量 x ...... )。
id = 1 , name = alice
id = 1 , name = bob
id = 1 , name = casssidy
id = 2 , name = alice
id = 2 , name = bob
id = 2 , name = casssidy
id = 3 , name = alice
id = 3 , name = bob
id = 3 , name = casssidy
id = 4 , name = alice
id = 4 , name = bob
id = 4 , name = casssidy
id = 5 , name = alice
id = 5 , name = bob
id = 5 , name = casssidy
透過上面這個範例可以看得出來這個 type 請求的量是很大的,所以若是測試的 Position 或 Payload 很多,時間會拉得非常的長。
請求的封包也是跟上面都一樣。
Payload 的部分
因為 Cluster bomb 是測所有 Payload 的組合,兩邊的 Payload set 都是五個所以 Request count 是 5 x 5。
1-1 Payload :
2-1 Payload :
結果 :
總共發出了 25 個請求
今天因為時間比較充裕就把四個直接介紹過一次順便多補充了一下 Payload Type 的部分,這邊四種 type 因為我自己也還沒有很熟,所以沒有辦法說出特定的 attack type 在哪些情境比較好用,等到之後打得靶機比較多了再回來做補充或者是另外做文章介紹。
到今天為止因為時間的關係 Burp 的章節我打算在這邊做一個收尾,明天打算來介紹一下靶機的資源跟一些推薦的文章,最後一天再來做 30 天的回顧跟做一個鐵人賽的總結,不知不覺走到這邊了希望後面兩天不要洩氣好好地走完,那今天就到這邊了,謝謝大家!