BurpSuite在非Web應用測試中的應用
0x00 前言
Burp不僅僅能在Web應用的測試中使用。我也在移動端和傳統客戶端測試時經常使用。對於採用HTTP方法傳送資料的應用,Burp是你的最佳選擇。
我要寫下一系列在我工作中給我幫助的那些Burp的提示和技巧。寫出來為了與大家分享,也為了留著備忘。
在撰寫此文時Burp Pro的最新版本是1.6.39,大多數情況下應用的Burp Free的最新版本是1.6.32。我最初使用的是Burp 1.5,自此版本之後Burp並沒有太大改變。
當我最初準備寫時,我沒有想到Burp有這麼多可寫的。所以我把它拆分成多個部分。請注意,這篇文章不是在寫Web應用測試,所以我會跳過一些功能不做介紹。如果你有任何好用的提示或用例,一如既往的,我們歡迎反饋。
0x01 攔截
Burp支援請求/響應包的攔截和修改。你可以在Proxy > Options 中配置這些設定。
1.1 攔截響應
有時候為了手動修改你不得不攔截響應資料包。設定在Proxy > Options > Intercept responses based。將第一條規則的核取方塊取消,否則二進位制payload有可能不被攔截。
1.2 攔截請求/響應規則
Burp支援為攔截請求/響應資料包制定規則。當有多重流量經過Burp時,你只想將某些特定節點的流量攔截下來時,這將非常有用。在Proxy > Options 中可以看到規則Intercept Client / Server Requests。這個預定義的規則只能攔截域內的請求。你也可以新增你自己的規則,規則支援正規表示式來匹配內容和包頭。
1.3 匹配和替換
你可以在Proxy > Options > Match and Replace 中找到匹配與替換。這意味著你可以在請求/響應資料包中按照你的要求進行替換。我通常用用來替換User-Agent。另一種方法不需要打補丁就能繞過客戶端控制元件在響應資料包中自動進行更改。例如,如果伺服器響應登入是否成功,我定義了一條規則來將登入失敗響應修改為成功響應,來繞過登入(這隻有在伺服器不關心你的登入是否成功時起作用)。
1.4 SSL流量
這是一個Burp被低估的功能,在Proxy > Options > SSL Pass Through中可以找到。
Burp這個功能的實現,不是像中間人攻擊一樣,而只是像一個非終端的TLS代理。
如果你想開啟代理,但是代理卻沒有工作。你可以把這個節點加入 SSL Pass Through中,看這個問題是否與Burp有關。
傳統客戶端會在不同的節點混合使用HTTP和非HTTP協議的流量是很常見的。Burp可以在非HTTP連線中架起中間人,可以靜默的丟包或者改包。這將會導致應用程式出現故障。首先應該識別終端節點,並且把它們新增進SSL Pass Through 中。可以看一個實踐案例
你可以使用這些功能使Burp變成一個快速簡單的埠轉換器。假設你想要連線一個客戶端,這個客戶端透過1234埠傳送給遠端伺服器所監聽的5678埠。如果你不希望自己寫程式碼實現,又不希望使用其他工具來重定向埠。把Burp放在1234埠上開代理,使用hosts檔案或其他作業系統特有的檔案來重定向這個終端節點到本地。在Burp中你可以透過設定Request Handling 來讓代理重定向全部流量到某個終端節點的不同埠。將這個終端節點新增進SSL Pass Through 中。
1.5 響應修改選項
這些中的大多數可能只是對於Web應用有效。
Convert HTTPS links to HTTP 和 Remove secure flag from cookies 和Force use of SSL都是Request Handling中的好工具。如果在應用或者瀏覽器和Burp之間禁用TLS,設定為Secure的Cookie將不會再傳輸,app也會停止工作。當使用Cookie設定響應頭時,Burp可以移除Secure標識。
1.6 在啟動時禁用攔截和混淆
我執行了Burp然後設定好了代理,執行應用卻沒有反應。然後我意識到啟動Burp時預設已經開啟了攔截。
Proxy > Options > Scroll all the way to the bottom > Under Miscellaneous > Enable interception at startup > Always disable.
0x02 代理監聽
Burp監聽之前流量經過的那個埠。預設為127.0.0.1:8080,你也可以自行設定。你可以讓新的代理監聽其他網口或者全部網口。唯一的限制是另一個程式就不能使用被選定的網口的這個埠了。
代理監聽可以在Proxy > Option > Proxy Listeners設定。
2.1 繫結
新增一個新的監聽很容易,只需要點選Add即可。本地環回是127.0.0.1或localhost。如果你想讓Burp監聽另一個網口,就可以在這裡進行選擇。如果想代理移動裝置這就非常有用了。在這種情況下,我會建立一個監聽為0.0.0.0或者選擇All interfaces,這些和移動裝置共享的網口(例如Windows hostednetwork)
我們可以在Import/export CA certificate 或Regenerate CA certificate來匯入/匯出一個新的呃Burp的根證照。更多資訊請參考。如果你重新生成根證照,你必須在作業系統或瀏覽器的證照儲存區使用新證照替代舊證照。
2.2 請求處理
這個功能對於非Web應用非常有用。假設傳統客戶端使用hosts檔案連線www.google.com:8000,而且我開啟了代理。在這個檔案中,www.google.com被重定向到127.0.0.1,我又建立了一個Burp監聽在8000埠。現在我需要將全部流量重定向到原始狀態(www.google.com:8000)。一種方法是在Redirect to host 和 Redirect to port中分別指定為www.google.com 和 8000。
如果應用在同一埠連線不同的節點(例如,我們想代理流量透過80埠或者443埠),我們就不能重定向流量了嗎?我們需要在Options > Connections > Hostname Resolution中設定,在下一個部分我將會解釋。
如果我使用Burp將流量匯入另一個代理工具,比如Fiddler或Charles,這也是有用的。
當我想要在Burp和應用之間把TLS剝離出來,或者我想把它加進去的時候Force use of SSL這個選項就有用了。有一個我時常參考的文件例項。
2.2.1 Burp的透明代理
更多資訊請看上面連結中的2.2.1和2.2.2部分。老實說,跟著這整個系列來看Burp怎麼作為代理來工作,你將會避免出現許多問題。
如果我們代理了一個代理敏感的客戶端,它將會在實際啟用TLS傳輸前傳送連線請求給想要連線的目標。這會通知代理該往哪重定向流量。這是因為代理無法看到TLS層加密的TCP流量包。由於不知道怎麼處理流量,CONNECT解決了這個問題。代理敏感的客戶端會把代理視為瀏覽器。
非代理敏感的客戶端就不在意他們的流量是否經過了代理。大多數這種程式都不使用代理設定或系統代理設定。程式依舊認為它在節點間直接傳送流量,並沒有被重定向到Burp。Burp可以將TLS層的資料代理並解密資料包,在包中透過頭中的host欄位找到原始節點。這就是Burp的透明代理。
可以在Proxy > Options開啟。選擇代理監聽,點選編輯,在Request Handling 中選擇Support invisible proxying (enable only if needed)。
我經常用它來捕獲應用和Burp之間的本地流量,判斷應用是否傳送連線請求。另一種方法是都嘗試一下,看哪個好使。
2.3 證照
我們可以配置Burp的中間人證照。
- Use a self-signed certificate意味著Burp只能使用單一證照
- Geneate CA-signed per-host certificates是最常用的,Burp將會針對不同的host生成不同的證照。證照的CN和域名相同。
- Generate a CA-signed certificate with a specific hostname這裡我們可以指定證照的CN。當一個應用透過檢查CN來鎖定時就有用了,但是這與終端節點常用的萬用字元不太一樣。
- Use a custom certificate (PKCS#12) 如果我們有確定的證照需要使用,我們可以在這裡修改。當證照檢查機制並不只是檢查CN,我們就需要手動輸入證照。
0x03 額外提示:請在提供充足的記憶體執行Brup
我從來沒有在記憶體不夠的電腦上執行Brup。但是我通常會在一天結束的時候儲存工作狀態,我不會大量使用Python/Ruby的擴充套件,而是YMMV。 透過命令列來給Burp分配2GB的記憶體:
java -jar -Xmx2048m /burp_directory/burpsuite_whatever.jar
0x04 Scope
理想情況下,你想新增應用程式的終端節點到Scope,這會幫你過濾掉其他無用的噪聲。
把終端節點新增到Scope中很容易,右鍵單擊一個請求,然後選擇Add to scope即可。然後你就可以在Target > Scope中看到你剛剛新增的請求。
只有你指定的那個URL才能進入Scope中,這很方便。例如,我選擇使用GET請求得到Google的圖示,並且新增其到Scope中。Google.com剩下的資料包將不會包含在Scope中,你必須手動新增。
另一種方法是複製URL貼上過來。如果我們右鍵點選任何位置的任何請求,我們都能透過點選右鍵選單中的Copy URL來複制這個請求的URL地址。我們可以在Scope中點選Paste URL來把這個請求置入Scope。這個按鈕在其他位置出現也具有類似的功能。
我們通常不止是需要一個請求。通常是整個節點,或者確定的整個目錄。幸運的是,在指定Scope時,我們可以使用正規表示式。我通常使用上述方法之一將URL新增進Scope中,然後透過編輯按鈕來對其修改。
Scope中有四個選項:
- Protocol:可以選擇Any、HTTP或HTTPS,我通常選擇Any
- Host of IP range::支援正規表示式,例如*.google.com
- Port:除非你為了尋找特定埠的流量,否則置為空即可。空意味著不會過濾掉任何埠的資料。這個選項也支援正規表示式。
- File:這個選項也支援正規表示式。
如果我們想要新增Google和它的所有子域到Scope中,我們要新增這個Logo(或者任何Google的東西)到Scope中,然後編輯這個請求。
0x05 HTTP歷史
在Proxy > HTTP History中可以看到Burp所有捕獲的請求和響應。我幾乎一半的時間都花在了這兒。我們可以使用過濾器來篩選資料包,過濾器的設定可以在Filter: Showing all items調整,你可以根據你不同的需求來調整你的設定。我一般都是清空這些狀態重新開始。
最有效的過濾是Show Only in-scope items,這將會把不在Scope裡的資料包都清除掉。
正如你在上圖中看到的,過濾器具有很多設定選項。大部分的設定都非常簡單易用,我要講解的是那些我在非Web應用中常用的設定。
- Filter by MIME type會一直保持所有的活動狀態直到你確認自己沒有丟失任何請求。MIME-type並不總能正確的反映請求。Other binary被用來檢視大多數二進位制或獨特的payload(預設是不活躍的)。
- 在Filter by file extension中,我只使用Hide功能,通常會為那些我不喜歡的東西新增一些額外的擴充套件(比如字型)
- 當該應用程式在不同的埠進行通訊,並且不支援代理設定時,Filter by listener就非常有用了。在這種情況下,我們必須重定向節點到localhost(例如使用host檔案),還要為每個埠建立不同的代理監聽。使用這個功能後我們可以檢視特定監聽器上的流量。
0x06 掃描(只在Pro版本中可用)
Burp有一個特別好的掃描模組,它雖然不像IBM的Appscan那樣優秀的覆蓋面和準確度,但是它的優勢體現在非Web應用測試。
- Burp設定更為簡單快捷,我可以登入、掃描單個請求。而在Appscan中,我必須立刻對整個應用程式進行測試(配置掃描、記錄登入、手動探索、自動探索、完全掃描等)。而且Appscan還不能配置一些特殊的登入設定,比如隨機令牌。
- Burp便宜的多,一年授權300美元,而Appscan一年授權需要20000美元。
掃描結果在Issue activity選項卡中顯示,在Target > Site map縱覽全域性結果則更為直觀,掃描請求都在Scan queue中。
6.1 實時掃描
Burp有兩種掃描模式,主動掃描和被動掃描。兩種掃描狀態可以同時開啟。 在被動掃描中,只關心請求和響應的資料包,僅僅透過規則進行匹配掃描,不傳送任何請求。在主動掃描中,可以產生有效的測試載荷傳送到伺服器,同時分析其請求和響應。
在此可以對其進行配置:
- 永遠不用讓Live Active Scanning保持On的狀態。永遠不要這樣做,你有可能會對應用造成破壞,或者應用被鎖定。始終掃描每個單獨的請求。
- 設定Live Passive Scanning為Scan everything可以增強掃描效果,但是會在結果中引入噪聲。如果你設定了Scope,你可以將掃描範圍限定在suite scope中。你還可以選擇Use custom scope來自己根據需要進行定製Scope。
6.2 設定選項
在這裡你可以配置這些掃描設定。儘管我不使用實時主動掃描,這些選項也可以用來配置對單個請求的掃描。
- Attack Insertion Points:你可以自己選擇注入點,根據你的需要新增或移除。減少注入點就等於提高掃描速度。
- Active Scanning Engine:對某些伺服器要調節掃描的最大流量,當你每分鐘發出超過設定值的請求時,伺服器有可能會將你的IP封掉。
- Active Scanning Areas:正如你所看到的,這些設定是面向Web應用的。我取消了所有設定,只新增那些我認為相關的設定。這樣在掃描期間可以節約很多時間。
- Passive Scanning Areas:你可以取消一切設定,只新增那些減少噪聲的設定,但是說實話,連我都懶得去改動這些設定。
- Static Code Analysis:開啟對JavaScript程式碼的靜態分析,對於非Web應用測試,你大可將其關閉。
0x07 入侵(Free版本有速度限制)
入侵模組是Burp的半自動掃描部分。可以右鍵單擊任何一個請求傳送到入侵模組,在入侵模組中你可以指定注入點,之後可以使用內部掃描器來進行掃描,或者使用你自己的載荷。
7.1 位置
傳送載荷到入侵模組後,在Intruder > Positions標籤頁中看得到注入點。我通常先Clear掉所有設定,然後使用Add來對自己設定的注入點進行標記。
正如你所見,我選擇之前用過的Google的Logo再次傳送到入侵模組。然後清除掉所有的預定義的注入點和已經新增的檔名。現在我們可以右鍵點選並選擇Actively scan defined insertion points來將其傳送到掃描模組,不僅掃描注入點還可以使用Start Attack來用我自己設計的載荷進行注入。因為我沒有選擇任何載荷,第二項是不會起效果的。
7.2 Payloads
現在我們可以設定我們自己的載荷來配置入侵模組進行攻擊。切換到Payloads選項卡。
7.2.1 載荷設定與選項
在這,我們可以使用不同的載荷。Burp可以滿足你在特殊情況下進行一些複雜的負載設定。例如,Recursive grep可以讓你在先前載荷的響應中得到每個載荷。還有Case modification、Character substitution、Dates和Numbers等等。
Simple list允許你對所有的注入點都使用自己的載荷。在有載荷的原始檔中複製到Payload Options中。你可以直接選擇使用這個檔案。
Runtime File透過點選Load按鈕來載入一個檔案。你也可以使用Burp自帶的負載列表,但似乎只有Pro版本才有。
Custom iterator(自定義迭代器)可以讓Burp生成更加複雜的載荷。如果我想要模擬兩個自己的十六進位制(四個字元),我可以在一個位置上設定0-9和a-f在其他位置上也類似的設定。Burp允許你設定八個位置。如果你想新增使用者名稱,可以選擇五個位置,新增自己的使用者名稱列表。Burp也支援位置間使用分隔符。
一個流行的載荷列表是FuzzDB。需要注意的是,這些載荷基本都會觸發反病毒軟體的報警。
7.2.2 載荷處理
在進行測試之前,你可以對載荷進行轉換處理。例如,你可以將載荷進行base64編碼再傳送,或者傳送其hash。
7.3 設定
我們可以在Request Engine限制入侵模組的速度,就像掃描模組那樣,或者減慢其速度。Payload Encoding可以在Burp中對特殊字元進行URL編碼。
7.3.1 正則匹配
我們可以查詢帶有特定字串的響應。如果我在進行SQL隱碼攻擊測試,我就可以尋找帶有SQL錯誤資訊的那些響應。對於XSS,我通常使用9999進行測試,之後只要在響應中匹配9999即可。
FuzzDB有自己的正規表示式來分析響應,這個頁面展示瞭如何使用它們。
0x08 重放、解碼、比對
雖然這些模組沒有很多功能,但是也相當有用。
8.1 重放
重放模組是為了手動測試而設計的,掃描模組是自動化,入侵模組是半自動化。
將請求傳送到重放模組和之前類似。我們可以修改請求,傳送請求然後觀察響應。
我選擇Google的Logo的GET請求,傳送到重放模組然後傳送它。我們可以對其進行修改,然後檢視其404響應和一些無效檔案。用Ctrl+Z可以撤銷這次更改。
你可以將修改過的資料包傳送到掃描模組或者入侵模組進行進一步掃描。
8.2 解碼
允許使用不同的格式進行編碼或解碼。也支援建立其雜湊。雙擊任何一個引數右鍵傳送至解碼模組。你也可以使用Ctrl+C複製其到解碼模組。
8.3 比對
比較模組可以對兩個載荷、兩個HTTP請求或響應進行比對。可以在位元組水平(通常是二進位制物件)進行比對,也可以在字的水平進行比對(通常是文字)。
0x09 配置選項
這個模組是用來配置Burp進行更復雜的工作。
9.1 連線
9.1.1 平臺認證
如果應用程式需要特殊形式的身份驗證,如NTLM或Basic,你都可以在這裡進行配置。如果你需要在瀏覽器中進行身份驗證,那麼你可以不需要進行修改。你將會在Burp中看到訊息頭的部分,意味著你不需要每次登入應用時都輸入它們。如果你需要使用某種平臺進行身份驗證,Burp對傳統客戶端都是有幫助的。
有時你的工具並不支援對其進行設定,我在使用Appscan時就存在這個問題,儘管Appscan支援平臺身份驗證。
你可以重定向你其他工具的流量到Burp,讓Burp承擔起這個責任。我不是暗示它們會生成大量的流量,但是形勢所迫,你必須使用Appscan。如果驗證失敗,錯誤訊息將顯示在Alerts選項卡中。
開啟Prompt for credentials on platform authentication failure,保證在認證失敗時可以迅速傳遞給瀏覽器。
9.1.2 上游代理伺服器—Socks代理
我已經講了很多關於Burp如何作為一個代理鏈中的一部分。我們要在這裡對經過Burp轉發的請求進行設定。這對聯合代理伺服器環境下的Burp使用是非常有幫助的。通常情況下,這些代理伺服器是自動配置的。這些設定可以訪問Tools (menu) > Internet Options (menu item)> Connections (tab) > LAN settings (button)來更改IE的代理設定。通常在Use automatic configuration script中能夠對proxy auto-config和pac檔案進行配置。檢索PAC檔案並且在文字編輯器中檢視,應該能看到代理地址:埠格式的配置。
使用SOCKS代理是類似的。根據細則,這將會覆蓋之前的代理設定。就我個人而言,我從來沒有對Burp的Socks代理進行配置。
9.1.3 超時設定
對老伺服器進行測試,應該增加超時設定,如果Burp是代理鏈中的一部分,就要增加超時的設定,以修正延誤。
9.1.4 主機解析
我在之前簡要討論過。如果應用使用多個埠還不支援代理伺服器設定。我們就要將應用程式的流量重定向到Burp。現在Burp需要知道這些流量將要被轉發到哪,否則它會陷入本地迴環的無限迴圈中。
因為Request Handling只支援一個節點,我們不能使用它。正相反,我們會將其置空,並新增節點及其關聯的IP地址在Hostname Resolution中。例如,server.com和10.11.12.13。如果節點經過負載均衡、CDN或者像亞馬遜的S3共享主機,就會更加複雜。在這種情況下,不經過代理,執行一個Wireshark或者Netmon來捕獲應用程式的流量。發現HTTP請求傳送目的地的IP地址。使用這個IP在host頭欄位中發揮作用。有許多方法能做到這一點,但是我覺得這個方法是最簡單的。
9.1.5 超出域的請求
我們可以指定Burp把不屬於域內的請求全部丟棄。如果我們設定了正確的域範圍,就可以降低流量噪聲,這會對我們有利。如果應用程式連線了除了我們正在測試的節點外的其他節點,這樣就增加的域的範圍,它可能會停止工作。如果你是一個沒有使用過Burp的人,又不想讓這個功能起作用,你可以在此指定。除此之外,我沒覺得它有多麼有用,我從未使用過此功能。
9.2 HTTP
Redirections和Status 100 Responses都很簡單,我就跳過了這個部分
9.2.1 流響應
這是一個被低估的功能,特別是對非Web應用測試來說。當我們要使用這個功能時,先讓我們看看代理是如何工作的。我曾經寫過一篇文章解釋這件事兒。
總之,下面是流程:
- Hipchat creates a TCP connection to Burp.
- Hipchat sends the GET request to Burp.
- Burp creates a TCP connection to Server.
- Burp sends the GET request to Server.
- Server send the web page to Burp.
- Burp closes the TCP connection to Server.
- Burp sends the web page to Hipchat.
- Burp closes the TCP connection to Hipchat.
需要注意的是,這個圖和HTTPS請求不同。
現在假設http://downloads.hipchat.com/blog_info.html
是個大檔案(比如是100MB的更新),應用程式需要請求下載。該應用程式將此檔案作為流,根據下載完成的資料量顯示一個進度條。
如果我們代理這個請求,Burp會執行步驟四。直到下載完成,Burp才會將此資料傳送到應用程式中。這意味著應用程式會等待此檔案,可能就放棄等待了,並重新傳送請求或者返回超時或凍結。如果我們新增http://downloads.hipchat.com/blog_info.html
到Streaming Responses部分,Burp就會在接收到資料時立即把響應傳遞給應用程式。
9.3 SSL
Server SSL Certificates只顯示從伺服器中檢索的證照列表。使用命令列工具像Openssl就可以很容易的得到證照,但是我猜你也想在這裡檢視證照資訊。
9.3.1 SSL協商
無論如何,安裝其都是個好主意,但是你也可以在Burp中使用無限長度的密碼。要確保你執行的是最新版的Java執行環境(JRE)。
除了Disable Java SNI extension啟用所有選項,只有當你需要SNI的時候再啟用。Allow unsafe renegotiation看起來有點嚇人,但是當使用客戶端證照的時候,這非常有用。
在代理期間,如果你不確信當前TLS設定是否工作,你需要時刻留意Alerts標籤頁。如果TLS我收失敗或者Burp和伺服器無法完成TLS握手,就會有錯誤提示。對於錯誤請看這個頁面。
9.3.2 客戶端SSL證照
如果應用程式需要客戶端證照,我們也可以非常容易地新增。我們可以選擇目的host和Burp對應這個host使用的證照。
9.4 會話
這個選項卡提供給我們許多自動化的東西。你可以建立宏。你可以進行一些操作然後把它們記錄下來錄製為宏。之後在中, 你可以在確定的域內或對特定的請求來選擇要執行的宏。例如,你可以建立用於登入的宏,這樣Burp可以在你傳送請求前就登入。還可以建立一個帶有特定值的引數,並將其新增到每個請求,或者在一定範圍內的請求,或者自動改變引數的值。
9.5 介面
你可以更改字型、編碼和其他一些可以更改的東西。不加贅述。
9.6 雜項
在這裡大多數專案不需要任何解釋。如果你有Pro版,我建議你開啟Automatic Backup。我通常將其設定為每小時存檔並且退出時存檔。因為,我希望可以每天儲存狀態的備份,我也開啟了Include in-scope items only,這大大減少了儲存資料的體積。 如果你需要在測試期結束時回頭檢查一些東西,或者你的賬戶被鎖定時,你可以回檔。 計劃任務會允許你做一些計劃。例如你可以設定掃描模組在何時啟動。如果你不想或者不能每天掃描,那就讓它在特定的時間進行掃描吧。不幸的是,作為計劃任務不允許執行宏,並且可選項也非常有限
9.6.1 Burp預設伺服器
這是一項新功能。預設設定在Use the default collaborator server。這是我非常不喜歡的一個功能,每次我新安裝完Burp總要去修改這個設定。我不太清楚它會把什麼資訊傳到伺服器中,所以我寧願別傳送客戶端資訊到預設的伺服器。你也可以選擇執行,詳細的可以閱讀文件
0x0A 報警
報警標籤頁也是重要的。特別是在TLS連線問題或是超時。如果這個標籤亮起時,要注意這個標籤。
0x0B 擴充套件模組
Burp支援擴充套件,擴充套件可以用Java、Python或者Ruby編寫。不幸的是,沒有很多非Java開發的擴充套件。個人來講,我更喜歡Python。我可以從讀其他人編寫的擴充套件中學到更多。
11.1 擴充套件
這個選項卡會顯示當前被載入的擴充套件。它還能顯示這些擴充套件的輸出和錯誤。在擴充套件載入之後,就要關注它的錯誤頁面執行中是否存在錯誤。新增擴充套件非常簡單,單擊新增,然後選擇型別和擴充套件檔案的路徑。我通常把這些都放在Burp目錄的一個子目錄內。
11.2 BApp商店
在Burp的app store中安裝外掛是一件輕而易舉的事情。只需要切換到該選項卡,選擇副檔名然後單擊安裝。如果該擴充套件是用Python編寫的,你必須安裝Jython才能執行。如果不方便安裝,Burp很方便的提供了下載Jython按鈕。
單擊下載按鈕開啟此頁,下載最新的Standalone Jar。我通常把它放在和Burp相同的目錄中。之後在Extender > Options中,可以選擇Python Environment > Location of the Jython standalone JAR file其作為你的執行環境。
現在就可以點選安裝按鈕進行安裝了。
11.3 API
APIs選項卡中有API文件。Burp擴充套件可以使用這些API來與Burp進行互動。正如你在那些為Java擴充套件編寫的文件裡看到的。
11.4 設定
正如之前所見,我們可以為Jython和JRuby設定路徑。我們也可以為Java和Python編寫的擴充套件指定目錄。在Burp啟動時,這些擴充套件所在的目錄會自動載入。
0x0C 實際案例
使用到的應用程式
Cygwin + IBM Appscan Standard + Charles Proxy + Fiddler + SoapUI
你不需要使用Burp的Pro版,IBM Appscan 也用的是評估版。所有的應用都是免費使用的。
12.1 開始
一般情況下,應用程式有自己的代理設定或者使用IE的代理設定,我們都能夠使用Burp來進行代理。
在開始之前,要確保你在作業系統證照儲存區安裝了Burp的根證照。
Burp的預設代理監聽在127.0.0.1:8080
12.2 Cygwin
Cygwin是一個Windows下的類*nix命令列。使用Cygwin可以很方便的執行很多程式,比如git或Curl。因為在一個API測試中,我需要使用一系列Curl命令。為了方便,我透過Cygwin來執行。重定向到Burp中,並且在測試中將使用到重放模組。
為了在Cygwin中安裝Curl,我們需要執行Cygwin的安裝檔案,並且在可用的包列表中選擇curl。這和包管理器的功能是相似的,並且支援搜尋功能。所以安裝Curl是非常容易的。安裝檔案會自動下載其依賴。
我要用再次使用GET請求再一次來取回Google的Logo。使用Burp模擬一些Curl命令來完成這個最簡單的任務。重定向瀏覽器的流量到Burp,並訪問Google首頁。確保你清除了瀏覽器快取,否則將不會傳送請求,你也看不到請求了。選擇Logo圖片的那個請求,右鍵點選Copy as curl command。
結果應該與下面類似:
curl -i -s -k -X 'GET' \
-H 'Referer: https://www.google.com/' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' -H 'DNT: 1' \
-b 'NID=78=S4kjzm5kwP82gAN8xazSJCiG6UWZhRNEGEE_a3hHZ2OMcy5bPX1CjZisClbvBgPUodlcpywR6WyhVSRUykloTI3ay7jSy9fpgTG2tKV2s8eojpQmL_F5sYKyHP1exm8iwp0F_FEnnE_DaQ' \
'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'
我們不需要關心這麼多項,我們可以忽略Referer、Cookie、User-Agent和其他一些沒用的東西。
curl -i -s -k -X 'GET' 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'
12.2.1 -k/安全開關
-k意味著Curl將不會驗證證照的安全性。在使用Burp時,有時候會非常必要,因為Burp自簽發的證照有可能失效。如果你想使用其他Curl命令,一定要記得加上-k來保證不出現任何問題。
12.2.2 設定Burp為Cygwin的代理
這很簡單,我們只需要執行以下命令:
export http_proxy=http://127.0.0.1:8080
export https_proxy=http://127.0.0.1:8080
12.3 IBM Appscan Standard
眾所周知,這是一個Web應用掃描軟體。有時候我會將其重定向到Burp上,為了練習,我們將使用評估版,在撰寫本文時,版本是9.0.3。我們必須註冊一個免費的IBM ID才能獲得軟體,我相信這對你來說並不難。
評估版只能掃描IBM的示例網站http://demo.testfire.net/
,不過這就足夠了。
在Appscan中,我們可以在Scan Configuration > Connection > Communication and Proxy設定代理。這和Firefox的代理設定類似,我們也可以使用IE的代理,或是為Appscan指定一個特定的代理。我們有兩種方法,第一種是透過IE代理,第二種是直接設定代理。
現在,我們可以重定向Appscan的流量到Burp了,也可以進行一些手動探索了。試用版軟體可以讓我們這樣做,但是不要把它新增進掃描中。如果我們有Appscan的授權版本,我們可以執行一個掃描。在Burp中可以看得到掃描的流量經過。
或者,你也有可能想把其他的流量匯入Appscan中。例如,使用額外的瀏覽器或者其他工具,你可以在Tools (menu) > Options > Recording Proxy (tab) > Appscan proxy port中設定匯入埠。你也可以透過選擇,來指定你自己設定的埠。在手動探索時Appscan只是起到監聽功能。
你可以安裝匯入Appscan的根證照了。
12.4 Charles Proxy
有時候,你需要使用兩個或兩個以上的代理來組成代理鏈。我現在將要給你介紹最流行的HTTP代理。
我們先下載並安裝一個免費試用的版本,在截稿時,版本是3.11.4。出於演示目的,我會使用IE和普通的Google主頁。事實上流量可以來自我們關心的任何位置,只要代理成功,其餘東西都是相同的。
要確保你安裝了Charles的根證照,你可以在Help (menu) > SSL Proxying設定。
12.4.1 IE -> Burp -> Charles
首先你要在Proxy (menu) > Windows Proxy關閉Charles的自動代理設定。如果系統代理是開啟的,就會在下拉選單中有一個小小的標記。在Proxy (menu) > SSL Proxying Settings (sub-menu) > SSL Proxying (tab)中確保Enable SSL Proxying是被選中的。點選新增,在HOST和PORT上填入*。在Proxy (menu) > Proxy Setting (sub-menu) > Proxies (tab)裡我們可以檢視HTTP代理埠,預設是8888埠,我們也可以指定其他埠。
試用版本會每隔三十分鐘重新啟動,就會再次開啟自動代理。確保每次啟動後你都要禁用它。你也可以使用Firefox來代替IE代理設定。
在Burp中,可以在Options > Upstream Proxy Servers新增上行代理伺服器為127.0.0.1:8888
現在可以在IE中開啟Google的主頁了,可以看到流量經過了Burp和Charles。
12.4.2 IE -> Charles -> Burp
我們只需要將IE的代理設定改為Charles,即127.0.0.1:8888。幸運的是就算Charles每隔三十分鐘重啟,但是它不會重置設定。
Charles要在Proxy (menu) > External Proxy Settings (sub-menu)確保開啟了Use external proxy servers。要將Web Proxy (HTTP)和Secure Web Proxy (HTTPS)都輸入Burp的代理監聽(127.0.0.1:8080)
設定完成,可以開啟主頁了。
12.5 Fiddler
Fiddler的好處在於其可以新增指令碼,我們使用的是4.6.2.2這個版本。
12.5.1 IE -> Fiddler -> Burp
首先,我們要在Tools (menu) > Fiddler Options (sub-menu) > HTTPS (tab) > Decrypt HTTPS traffic設定Fiddler可以捕獲HTTPS流量。這將會在Windows證照儲存區安裝Fiddler的根證照。這將會讓Fiddler捕獲並且解密全部經過代理的流量。還要確保Ignore server certificate errors (unsafe),因為Burp可能是不被承認的。
切換到Gateway標籤頁,選擇Manual Proxy Configuration並且在上面的輸入框中輸入http=127.0.0.1:8080;https=127.0.0.1:8080,這將會將Fiddler的流量匯入到Burp。
現在設定完成,可以訪問首頁了。
你也可以在Tools > Fiddler Options > Connections (tab)手動更改Fiddler的代理設定。
12.5.2 IE -> Burp -> Fiddler
首先要禁用Fiddler的自動代理,並且把Gateway中的所選項刪除。如果使用IE代理設定,記得選擇No Proxy,否則又會回到Burp。之後我們設定Burp是IE的代理,Fiddler是Burp的上游代理。
12.6 SoapUI
這個部分我已講過,請參見。
作者的案例要寫在第五部分,不知道會連載幾期
相關文章
- JDBC 在效能測試中的應用2022-06-23JDBC
- 單元測試在Unity中的應用2021-12-06Unity
- 【cypress】5. 測試本地web應用2021-05-03Web
- 自動化測試在國際軟體測試中的應用2022-10-29
- 前沿探索|AI 在 API 開發測試中的應用2023-04-27AIAPI
- 數字證書及其在安全測試中的應用2020-08-19
- web應用安全測試之業務漏洞2020-12-09Web
- SpringBoot中的響應式web應用2020-11-16Spring BootWeb
- IoC在ASP.NET Web API中的應用2021-09-09ASP.NETWebAPI
- Web應用程式測試的工具selenium用法詳解2018-12-27Web
- Mock技術在測試領域的應用2020-04-06Mock
- 邊框檢測在 Python 中的應用2024-03-14Python
- 聊聊對稱/非對稱加密在HTTPS中的應用2018-03-20加密HTTP
- AppSpider Pro 7.5.014 for Windows - Web 應用程式安全測試2024-12-10APPIDEWindowsWeb
- 面向Web應用的併發壓力測試工具——Locust實用攻略2021-12-07Web
- MVC模式在Java Web應用程式中的實現2020-04-07MVC模式JavaWeb
- Redis在Web專案中的應用與實踐2019-02-17RedisWeb
- Redis 在 Web 專案中的應用與實踐2019-02-21RedisWeb
- python 裝飾器在介面自動化測試中的應用2020-05-20Python
- python裝飾器在介面自動化測試中的應用2020-05-20Python
- 驗證碼處理在自動化測試中的應用2024-11-01
- Jetty - 在整合Spring的J2SE應用程式中嵌入Jetty的Web功能(應用和Web共用ApplicationContext)2018-05-17JettySpringWebAPPContext
- Invicti v24.4.0 for Windows - Web 應用程式安全測試2024-04-23WindowsWeb
- Invicti v24.3.0 for Windows - Web 應用程式安全測試2024-03-15WindowsWeb
- Invicti v24.10.0 for Windows - Web 應用程式安全測試2024-10-12WindowsWeb
- Invicti v24.6.0 for Windows - Web 應用程式安全測試2024-06-14WindowsWeb
- Invicti v24.7.0 for Windows - Web 應用程式安全測試2024-07-14WindowsWeb
- Web 和移動應用程式測試之間的區別2022-12-30Web
- JSON資料格式及其在WEB開發中的應用2018-09-10JSONWeb
- redis在nodejs中的應用2019-02-16RedisNodeJS
- redis在python中的應用2019-02-16RedisPython
- Refs 在React中的應用2019-03-29React
- HMM在NLP中的應用2018-04-10HMM
- MQTT 在 Elixir 中的應用2022-01-30MQQT
- web開發實戰教程:Apache Shiro在web專案中的應用2018-09-05WebApache
- 內容定址在 Web3 的應用2024-12-06Web
- 感測器在自動駕駛中的應用2023-03-03自動駕駛
- Acunetix v24.7 (Linux, Windows) - Web 應用程式安全測試2024-07-22LinuxWindowsWeb