0x00:使用原因
我們在做滲透測試的時候,經常會遇到這種情況,測試跨站可能有些功能插入惡意腳本后無法立即觸發,例如提交反饋表單,需要等管理員打開查看提交信息時才會觸發,或者是盲注跨站,盲打 XSS 這種。再例如 SSRF,如果程序不進行回顯任何信息,而只提示你輸入的是否合法,那么也無法直接判斷程序存在 SSRF 漏洞,我們可以叫盲 SSRF。再例如 XXE,引入外部文件時,如果程序也不返回任何信息和引用文件的內容,而只提示輸入的是否有誤,那么也無法直接判斷程序是否存在 XXE 漏洞,我們也可以叫盲 XXE。總之,程序不進行詳細的回顯信息,而只是返回對或者錯時,我們都可以叫它盲。
解決辦法是,我們需要一個外部的獨立的服務器,可以通過域名 url 進行訪問。然后在測試盲跨站插入惡意腳本時帶上這個服務器的地址,在測試盲 SSRF 時讀取的文件 url 寫我們這個服務器的地址,在測試盲 XXE 時引入的外部實體地址也寫我們這個服務器的地址。如果存在上述的這些問題,那么目標服務器就會去訪問我們自己的服務器,我們自己服務器要做的就是記錄別人訪問自己的信息,記錄其發送內容相應內容等,因為目標服務器不會給前台返回任何信息,而在和我們外部服務器交互時,我們外部服務器會記錄其交互的過程和內容,從而有利於我們判斷漏洞的存在。
明白原理后,Burp 給我們提供了這個外部服務器,叫 Collaborator,對於 Collaborator 服務器,我們有兩種使用方式,第一個是使用 burp 官方提供的,第二個是自己搭建。本文章記錄 burp 官方提供的使用方法,至於自己搭建如果大家感興趣可以在網上搜索相關的教程內容。
0x01:Collaborator 介紹
對於 Collaborator 服務器,我們這里簡單介紹下它應該擁有哪些功能。首先它要能捕捉到 burp 發出的 payload 觸發目標與外部系統發生數據的交互行為,其次它自己與目標產生交互的數據要能夠返回到 burp,也就是返回給攻擊者,也就是我們。
對於 Collaborator 服務器,我們這里再簡單的介紹下它應該有哪些服務,首先它是公網 ip,其次它要有自己的域名,並且這個服務器要注冊為該域名的權威 dns 服務器。然后這個服務器要提供 dns 服務,並且可以相應任何對它的 dns 請求。最后它需要提供 http 和 https 服務,且需要使用一個有效的 ssl 證書。對於為什么要提供 dns 和 http、https 服務很好理解,payload 如果可以執行或者可以允許遠程加載,那么就需要用 dns 來解析我們的域名,而產生的交互則需要 http 和 https 來提供。
0x02:Collaborator 原理
我們知道了使用原因和其具有的功能后,我們再來簡單看下它的原理,首先,我們先來看下平時的測試過程,如下圖。
平時測試時,我們會像服務器提交一個 payload,而服務器響應給我們相關的 response 信息。大家都叫它帶內攻擊,這些理論的東西,我們簡單理解就好,這里我們就理解成單挑通信的通道為帶內攻擊,也就是整個測試過程或者說是交互過程,中間沒有其外部的服務器參與,只有自己和目標服務器,那么就叫帶內。而我們一般的測試如果稱為帶內攻擊,那么 Collaborator 服務器用來測試盲的各種漏洞的話,則需要我們外部的獨立服務器參數,也就是帶入了外部的服務器,我們叫它帶外攻擊。這里簡單的提了一下這個帶內和帶外,我們只要理解其過程即可。帶外流程圖如下。
以上就是 collaborator,也就是帶外攻擊的大體流程,其實就是在測試的過程中目標服務器和外部的服務器有了交互,下面再來看一張更詳細的圖。
上面這個圖可以大體的代表 collaborator 的大體工作流程,首先 burp 發送 payload 給目標程序,以上圖為例,param 存在漏洞注入點,其 payload 為外部的服務器 url 地址,隨后目標程序若進行解析或則引用調用等,則會去訪問這個地址,而這個地址是我們的 collaborator 服務器,所以 collaborator 會記錄其訪問的請求信息以及響應信息和 dns 的信息。而當 burp 發送 payload 后,就會不斷的去問 collaborator 服務器,你收到我發送的 payload 交互了么,這時 collaborator 就會將交互信息告訴 burp,burp 最后進行報告。
以上就是 collaborator 的大體工作流程,最后我們再說兩個理論性的東西,一個是 burp 的 collaborator 地址,當使用 burp 的 collaborator 時,burp 會提供一個 url 地址,這個地址是 burp 的一個二級域名。第二個是輪詢,也就是我們上面提到的,burp 發送 payload 后會不斷的問 collaborator 是否收到我發生的 payload 交互信息,例如 10s 問一次,我們可以叫它輪詢,其實叫什么無所謂,我們理解這個過程即可。
0x03:Collaborator 使用
對於 burp 的 collaborator,好像是 1.7 幾以后自帶,我這里沒有,所以是通過安裝插件來實現的,直接到 burp 的 extender 下的 bapp store 找到 Collaborator 安裝即可。安裝后,首先需要設置下我們使用的服務器是官方默認提供的,在 project options-misc-burp collaborator server 下,選擇第一個默認官方服務即可,第二個是關閉 collaborator,第三個是使用自己的服務器。如下圖。
設置好后,我們可以通過工具欄的 burp 下的 burp collaborator client 來運行,如下圖。
打開 collaborator 插件后,點擊 copy to clipboard 來復制其提供的 payload url,如下圖。
number to generate 是生成的數量,下面的 poll now 按鈕是輪詢時間,點擊 copy to clipboard 復制其提供的 payload url 后,就可以直接在要測試的點粘貼即可,如果目標服務器有交互,則 collaborator 會有響應信息。且這個 payload url 每次復制其二級域名都會隨機生成。
0x04:盲 XXE 測試
我這里沒有找到盲的 XXE 漏洞示例,所以就拿 bwapp 的 xxe 做演示了,bwapp 的 xxe 是有回顯信息的,我們先來看下它的原始請求包。
原始請求發送的 xml 內容,其 login 的名稱會進行回顯,這里我們把它當作沒有任何回顯信息,只返回 true 和 false 的話,我們用 collaborator 來進行測試,首先修改 xml 的內容,加入一個變量值為外部的服務器 url,然后進行發送,這時 collaborator 會不斷輪詢去問交互結果,而結果會在 collaborator 中進行顯示,如下圖。
上圖畫綠線的就是 collaborator 提供的 payload url,我們在原始的內容上加入了 entity 實體變量 test,值為 payload url,這時 go 發送后,collaborator 捕獲的交互信息如下。
上圖是 request 的內容,host 的是我們的 payload url,請求后,我們再切換到 response 欄查看,內容如下圖。
payload url 請求會返回一串隨機內容,我們可以看到已經成功的進行了響應,說明目標服務器進行了外部的請求和交互,那么對於盲 xxe 來說,我們可以證明存在此問題。
0x05:盲 SSRF 測試
SSRF 在加載外部文件時,若沒有進行嚴格過濾,則可導致任意文件加載,若加載文件而不反悔文件的內容,也不反悔任何詳細的信息,那么對於這種盲 SSRF,我們也可以用 collaborator 進行測試,只要加載的請求替換成我們的 payload url 即可。這里還以 bwapp 的 SSRF 為例,bwapp 的 SSRF 也是有回顯信息的,我們還把它當成沒有任何提示的盲來進行演示。
首先還是先來看下原始的請求數據包,內容如下圖。
對於 url 中的 language 字段引用的文件名稱,可以隨意進行替換,也算作是文件包含問題,我們把他換成 payload url 后進行提交,此時 collaborator 會顯示出其交互的詳細信息,resquest 如下圖。
可以看到目標服務器進行了 dns 解析了我們的域名,然后 http 進行了訪問,response 信息如下圖。
0x06:盲 XSS 測試
同樣的,我們也可以用 collaborator 來進行盲跨站的測試,使用場景例如盲打 xss,提交表單等,若一個平台的提交表單功能,提交內容插入惡意腳本后,提交后台可能不會立即生效,需要等管理員訪問相關的頁面才會執行,那么我們無法判斷是否存在存儲跨站的問題,這時使用 payload url 后,collaborator 會不斷的進行輪詢,只要管理員進行了訪問,collaborator 就會捕捉到然后返回到 burp。
我們這里還以 bwapp 的 stored xss blog 為例,這里的腳本提交后就會在列表中顯示並執行,也是有回顯的,我們這里還是以盲跨站來測,首先在提交內容處,插入 script 標簽,src 為我們的 payload url,如下圖。
插入后我們查看元素可以發現,腳本內容已經插入成功,如下圖。
因為插入的時候就會執行一次,而我們瀏覽頁面的時候又執行了一次,所以 collaborator 會又兩條記錄信息,這里我們當成盲 xss 來測,如果插入沒有執行,而當管理員訪問頁面后 payload 執行了。collaborator 捕捉的交互信息如下,request 內容。
response 內容(這里是兩條信息,插入執行了一次,訪問又執行了一次,而我們測試盲 xss 時,是只有一條,插入無法驗證所以沒有,管理員訪問后執行所以一次,大家不要在意這里的細節,明白其原理和使用即可)。
以上就是 burp 的 collaborator 使用的一些簡單的總結,理論上對於盲 sql 注入也應該可以行得通,但是我沒有找到合適的例子,本機嘗試也有一些錯誤,所以就不列了,如果碰到盲注的話可以先判斷它是數字型還是字符型,隨后再通過 and、or 這些關鍵字結合查詢一下來判斷,對於 collaborator 的話,官方說明文檔說可以使用 sql 去查詢 xml 文件,xml 引入外部實體也就是 payload url,然后看交互信息。
0x07:總結
對於平時測試中的一些盲問題,例如盲 xss,盲 xxe,盲 ssrf 等,如果不能看到一些回顯信息,無法判斷是否存在漏洞時,可以使用 burp 的 collaborator 來進行嘗試。
————————————————
版權聲明:本文為CSDN博主「aFa攻防實驗室」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fageweiketang/article/details/89073662