Burp Suite 常見功能介紹
這堂課我們會介紹Burp Suite,是在本地有關Web滲透中最常用的工具之一。Burp Suite免費版已經預先安裝在Kali Linux裡面,不需要特別做安裝。Burp Suite本身也集成了很多很好用工具,除此之外也有很多很不錯的第三方的plugin。
Burp Suite主要功能大概有8個,Proxy, Extractor, Repeater, Sequencer,Decoder, Spicer, Comparer, Extender。這個課程主要focus在我們比較常用的功能上面,所以其他東西大家可以自行探索。
第一個是Proxy,這個功能主要用來攔截你對target網站的request跟response,一般來說,如果不考慮前面的reverse proxy的話,我們對目標網站發起的request大概像下面這個樣子:
User ===== Request ===== > Website
User < ===== Response ===== Website
就是我們user先發起一個request對website,website再對我們user做出response。如果在瀏覽器端設置一個proxy的話,再將Burp的listener打開,request就會先經過Burp的proxy,再傳到網站。
先打開Burp Suite,先進到Burp之後我們開啟Proxy的標籤:
之後要在firefox做設定如紅圈處:
回到Burp,不管是想看HTTP history或是WebSockets history,都用紅圈的預設瀏覽器。
可以看到開啟網頁的封包
也可以繼續用firefox,不過會出現以下畫面:
點選紅圈後:
再一直點下圖紅圈,直到瀏覽器出現畫面為止(可能會再遇到上圖情況,一樣點Accept the Risk and Continue):
如果我們forward的話,response就直接回到你的瀏覽器,如果drop掉的話就會顯示error。
接下來可以在HTTP history見到剛剛的所有request跟response:
通常我們會把連接起來的request可以按action或是直接在編輯區裡面點右鍵,看你要送去extractor,repeater或sequencer之類的等等的,或是說你直接在空白的區域也可以做一樣的操作。
那intruder這個功能是在你需要對某個地方進行爆破或是重複進行某個payload的時候,在你設定的位置進行變化並重放request,然後我們可以先設定host跟port
這邊我們就可以設定我們的target跟我們的port等等的,然後我們再新增其他的request。我們這邊要注意的是說Burp的host和你的request中的hostheader可以不一樣,例如說你可以對著這個4.4.4.4的80port發出一個hostheader為4.9.9.9的request,那在一些情況下這是一個很有用的功能,因為hostheader也有可能幫你進行其他的漏洞利用,那種攻擊的名詞是hostheader injection或是host injection等等的,但在OSCP考試裡面基本上不會出現。
那intruder裡面的position就是上圖被綠底框起來的這個部分,就是說你想要爆破的部分是什麼。例如說這個p2後面,想要對他進行一些字典檔或是數字或是各種各樣的爆破,那你就可以把這邊框起來。但這個自動判定沒有到很準,基本上就是把你等於的後面全部給標註起來,所以通常我會先clear然後再add某個你想要做變化的地方。
再來是attack type,
總共有下列種類:
Sniper: 對變數(被§§
夾住的位置)依次進行fuzzing,如果有多個變數會依次進行(像是兩個for loop),也是最常用的Type
Battering ram: 對變數同時進行破解,多個變數同時進行(但說真的我自己是幾乎可以說是沒有遇到需要用它的場景)
Pitchfork: 每一個變數對應一個payload字典的攻擊方式,取每個字典的對應項,例如現在有p1跟p2,那它會用下圖這種對應的方式,例如說這個craig然後1234,然後就一組一組一組的方式一直下去。
cluster bomb: 每個變數對應一個字典,進行交集fuzzing,嘗試各種組合,比較常用來同時對username+passwd的爆破(但很少用)。例如說在下圖我們有一組把他取為username、然後這個叫pass。那因為通常我們帳號username的字典檔跟密碼的字典檔會不一樣,那這兩個不同的字典檔分別對username跟password進行爆破組合這樣子。
再來是payload的部分,我們是用來選擇變數內要塞的payload可以是字典檔或是burp自帶一些字元比如說數字等等的。number可能就會說問你從哪裡到哪裡,然後100。那如果你選擇每次加2的話,就會變成51個,3的話就是34個以此類推;也可以選擇更大,例如說1000。
那他也有其他的什麼date啊,或是一些more payload或是一些illegal的unicode、
或是character block、bitflipper、那預設下是simple list,可以根據需要使用別的payload的類型。例如說剛剛提到的數字,在選定number範圍即可。常用的字典檔有rockyou.txt(但不推薦,因為使用社群版的Burp太慢了,建議使用其他工具來使用此字典檔),或是Seclist中的special-chars.txt,因為它的字典檔非常的小,印象中好像只有32個而已,也就是說他只需要嘗試32次的request,所以不用擔心他跑太慢。
下一個是repeater,這個功能主要是針對某一個可能有漏洞的網頁重複進行payload修改,再發出request。因為我們在某些時候會用到多個payload,進行分別測試或是進階測試。例如說先通過一個SQL injection,bypass身份驗證拿到一組cookie後,再對登入後的網站進行其他攻擊。這時候就可以在repeater再次使用右鍵,按send to repeater,這樣就會多出一個新的repeater頁簽。
例如說這個robot.txt,改一個login好了
這邊可能有user跟pass,如果你發現login頁面有一個SQL injection,可以取得一個credential,例如說or 1 == 1,然後password就隨便,如果成功登入的話,這邊response就會幫你設定一組cookie,或是一些憑據等等的。
那你這時候不想要這個頁面丟失,或是說你可能等一下還要重新拿一組cookie等等的這種狀況,所以我們就可以再次把它升到另外一個頁簽,就是空白處右鍵,再按send to repeator。
我們也可以針對不同的頁籤命名,在頁簽上按右鍵,再按Rename Tab來重新命名成這頁籤需要做的事。
再來是decoder,這是一個很簡單也很好用的功能,主要就是將你想要的字串進行encode。特別是Burp,他decoder支援連續的encode跟decode。先看看連續encode:
可以看到把admin翻譯成base64,再將其結果翻譯成url,當然反過來也可以,就是連續decode。以上面來講,先用url來decode成,再用base64來decode。
但是這個功能他會將你所有的輸入的input去做encode跟decode,不支援部分的encode跟decode。如果想要分區塊的進行encode或是decode的話,你可以在proxy或是repeater的地方用以下快捷鍵:
URL
- Encode: Ctrl+U
- Decode: Ctrl+Shift+U
HTML
- Encode: Ctrl+H
- Decode: Ctrl+Shift+H
Base64
- Encode: Ctrl+B
- Decode: Ctrl+Shift+B
例:
用Ctrl+U:
尤其是像寫reverse shell最常遇到這個問題,像這個比較長的一些payload當然不可能一個一個去檢查,哪裡需要encode哪裡不需要,可以直接用這個crtl+u進行encode變URL這樣子。