BurpSuite在非Web應用測試中的應用

路人甲 · 2016/04/18 10:18html

0x00 前言


Burp不只僅能在Web應用的測試中使用。我也在移動端和傳統客戶端測試時常用。對於採用HTTP方法發送數據的應用,Burp是你的最佳選擇。java

我要寫下一系列在我工做中給我幫助的那些Burp的提示和技巧。寫出來爲了與你們分享,也爲了留着備忘。git

在撰寫此文時Burp Pro的最新版本是1.6.39,大多數狀況下應用的Burp Free的最新版本是1.6.32。我最初使用的是Burp 1.5,自此版本以後Burp並無太大改變。github

當我最初準備寫時,我沒有想到Burp有這麼多可寫的。因此我把它拆分紅多個部分。請注意,這篇文章不是在寫Web應用測試,因此我會跳過一些功能不作介紹。若是你有任何好用的提示或用例,一如既往的,咱們歡迎反饋。web

0x01 攔截


Burp支持請求/響應包的攔截和修改。你能夠在Proxy > Options 中配置這些設置。正則表達式

1.1 攔截響應

有時候爲了手動修改你不得不攔截響應數據包。設置在Proxy > Options > Intercept responses based。將第一條規則的複選框取消,不然二進制payload有可能不被攔截。windows

攔截請求

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中,你必須手動添加。

添加Google Logo

另外一種方法是複製URL粘貼過來。若是咱們右鍵點擊任何位置的任何請求,咱們都能經過點擊右鍵菜單中的Copy URL來複制這個請求的URL地址。咱們能夠在Scope中點擊Paste URL來把這個請求置入Scope。這個按鈕在其餘位置出現也具備相似的功能。

粘貼URL

咱們一般不止是須要一個請求。一般是整個節點,或者肯定的整個目錄。幸運的是,在指定Scope時,咱們可使用正則表達式。我一般使用上述方法之一將URL添加進Scope中,而後經過編輯按鈕來對其修改。

Scope中有四個選項:

  • Protocol:能夠選擇Any、HTTP或HTTPS,我一般選擇Any
  • Host of IP range::支持正則表達式,例如*.google.com
  • Port:除非你爲了尋找特定端口的流量,不然置爲空便可。空意味着不會過濾掉任何端口的數據。這個選項也支持正則表達式。
  • File:這個選項也支持正則表達式。

若是咱們想要添加Google和它的全部子域到Scope中,咱們要添加這個Logo(或者任何Google的東西)到Scope中,而後編輯這個請求。

添加Google.com的子域名

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應用測試來講。當咱們要使用這個功能時,先讓咱們看看代理是如何工做的。我曾經寫過一篇文章解釋這件事兒。

總之,下面是流程:

GET流程

  1. Hipchat creates a TCP connection to Burp.
  2. Hipchat sends the GET request to Burp.
  3. Burp creates a TCP connection to Server.
  4. Burp sends the GET request to Server.
  5. Server send the web page to Burp.
  6. Burp closes the TCP connection to Server.
  7. Burp sends the web page to Hipchat.
  8. 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按鈕。

Jython

單擊下載按鈕打開此頁,下載最新的Standalone Jar。我一般把它放在和Burp相同的目錄中。以後在Extender > Options中,能夠選擇Python Environment > Location of the Jython standalone JAR file其做爲你的運行環境。

Jython路徑

如今就能夠點擊安裝按鈕進行安裝了。

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命令

結果應該與下面相似:

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代理設置

如今,咱們能夠重定向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端口,咱們也能夠指定其餘端口。

Charles SSL代理

試用版本會每隔三十分鐘從新啓動,就會再次開啓自動代理。確保每次啓動後你都要禁用它。你也可使用Firefox來代替IE代理設置。

在Burp中,能夠在Options > Upstream Proxy Servers添加上行代理服務器爲127.0.0.1:8888

配置Charles做Burp的上行代理

如今能夠在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多是不被認可的。

Fiddler HTTPS選項

切換到Gateway標籤頁,選擇Manual Proxy Configuration而且在上面的輸入框中輸入http=127.0.0.1:8080;https=127.0.0.1:8080,這將會將Fiddler的流量導入到Burp。

重定向流量

如今設置完成,能夠訪問首頁了。

流量展現

你也能夠在Tools > Fiddler Options > Connections (tab)手動更改Fiddler的代理設置。

Fiddler設置

12.5.2 IE -> Burp -> Fiddler

首先要禁用Fiddler的自動代理,而且把Gateway中的所選項刪除。若是使用IE代理設置,記得選擇No Proxy,不然又會回到Burp。以後咱們設置Burp是IE的代理,Fiddler是Burp的上游代理。

12.6 SoapUI

這個部分我已講過,請參見

做者的案例要寫在第五部分,不知道會連載幾期

相關文章
相關標籤/搜索