1. 程式人生 > >使用burp suite或fiddler進行越權測試的步驟

使用burp suite或fiddler進行越權測試的步驟

一、什麼是越權漏洞?它是如何產生的?

越權漏洞是Web應用程式中一種常見的安全漏洞。它的威脅在於一個賬戶即可控制全站使用者資料。當然這些資料僅限於存在漏洞功能對應的資料。越權漏洞的成因主要是因為開發人員在對資料進行增、刪、改、查詢時對客戶端請求的資料過分相信而遺漏了許可權的判定。所以測試越權就是和開發人員拼細心的過程。

二、越權漏洞的分類?

主要分為水平越權和垂直越權,根據我們的業務通俗的表達一下這兩者的區別:

水平越權:兩個不同的公司A和B,通過修改請求,公司A可以任意修改B公司的員工、部門、考勤等資訊;

垂直越權:同一個公司不同許可權的管理員A和B,通過修改請求,管理員A可以修改不在他管轄範圍內的員工的部門、考勤、工資等資訊;

三、測試越權漏洞需要用到哪些工具?

實戰一:Burp Suite,強烈建議用1.7的免費版(1.6破解版的https證書配置容易出問題)-->

實戰二:fiddler+chrome+SwitchyOmega外掛(建議使用此款工具)

四、如何查詢越權漏洞?

在與伺服器進行資料互動時客戶端攜帶著標識使用者的身份的cookie,當服務端的session與cookie中的身份匹配成功後,才能允許該使用者進行相關操作(cookie和session的關係-->一彈二彈)。除了cookie之外,在請求中可能會帶一些引數,細覽下可能存在辨別資訊的唯一值,來進行測試。這裡要說一點,傳輸的引數並不一定在請求引數中,也有可能存在連結等位置。當攔截一個請求後分析是否有引數:

1、請求中不存在引數,只用cookie進行身份驗證,不可越權;

2、請求中存在引數,並且引數中的某些值可能是辨別資訊的唯一值(如employeeID、departmentID、ID等),可能存在越權;越權的原因是引數中的employeeID沒有判斷是否是cookie中使用者所管轄的員工ID。

五、實戰演練(Burp Suite)

  1. 下載安裝burpsuite

            burpsuite需要java執行環境,所以必須先安裝JDK並配置好環境變數-->
            配置好環境後雙擊.jar檔案,彈出視窗無腦直接點選next即可開啟(如果需要載入配置檔案才需要勾選其他選項);切換到proxy模組,點選一下intercept is on按鈕停止攔截資料。如圖1
  2. 給瀏覽器安裝證書用以訪問https

  3. 首先開啟firefox,在位址列輸入burpsuite的預設監聽地址及埠127.0.0.1:8080,點選CA Certificate下載並儲存證書cacert.der,如圖二

  4. 接著依次點選firefox的選單->選項->高階->證書->檢視證書->證書機構->匯入,選擇剛才下載的cacert.der,在彈出的視窗中勾選“信任此CA標識的網站”,最後點選確定,如圖三。

  5. 開啟待測網站,攔截對應操作的請求資料

    尋找網站中可以對資料進行增刪改查的地方,比如我們要測試一下調整年假的操作是否存在越權時,先操作修改年假數量,然後在點選儲存之前開啟intercept的攔截開關,最後再點選確定按鈕,就會攔截到請求資料,如圖四

  6. 分析該請求是否有越權的可能

    從攔截到的請求中我們可以看出,修改年假的操作使用的是POST請求,呼叫了介面/attendance/ajax-save-annual-adjust-days,並傳遞了引數employeeId、year、adjustDays。在這三個引數中明顯可以看出employeeId是判斷該條請求身份的引數,雖然cookie中存在QJYDID、WAVESSID、JSESSIONID等身份驗證,但是如果開發人員沒有判斷這個employeeId是否是該cookie身份所在公司下的員工時,就會存在越權漏洞,導致修改任意employeeId就能操作年假的修改,不需要所屬公司的限制。

  7. 把可能存在的越權的請求傳送到repeater備用

            repeater模組的功能就是對請求進行重放(repeat:重複),重放前我們可以對請求和引數任意修改。(直接在intercept模組修改引數,再點選forward放行也是可以的)
            在請求資料頁面點選右鍵,選擇“Send to Repeater”,該請求自動複製到repeater模組,如圖五
  8. 關閉intercept的攔截開關,點選“intercept is on”後開關變為“intercept is off”就是關閉了

  9. 修改引數employeeId後重放請求

    再開啟一個firefox的隱身視窗(小技巧:firefox的普通視窗和隱私視窗不同源,可以分別登入兩個公司,方便操作和檢視),用公司B登入;剛才用普通視窗登入的是公司A,攔截請求時的employeeId是屬於公司A的員工A01;我們可以通過瀏覽器自帶的除錯工具或同樣的攔截方法獲取一下公司B的員工B01的employeeId。把burpsuite切換到repeater模組,修改引數為員工B01的employeeId,點選GO,如下圖
            檢視這條返回資料的狀態是true,message資訊內容是“資料儲存成功”,然後檢視公司B的員工B01的年假是否顯示我們請求時填寫的99。
            ◆如果B公司的員工B01的年假顯示為99:越權成功,我們用公司A的請求身份成功的修改了B公司員工B01的年假;
            ◆如果B公司的員工B01的年假沒有變化:雖然返回資料顯示成功,但是沒有改變數值,這可以看做不存在越權漏洞(注意業務邏輯,修改的是12月份的資料,但當前報表展示的是11月份的);

  10. 解決重放請求的返回資料中文亂碼

            軟體內目前不能直接轉碼,畢竟這款工具是歪果仁開發的,我們只能間接的檢視亂碼的中文。在response中右鍵,選擇“request in browser->in original session”,複製彈出視窗的連結到firefox瀏覽器開啟即可正確顯示中文內容。

  11. 上面我們進行了水平越權的測試,想一想垂直越權怎麼做呢?

     水平越權是測試不同公司之間是否可以互相操作,垂直越權是測試同一公司不同許可權的管理員是否可以操作不屬於他管轄範圍內的員工等。
            大概說一下垂直越權測試流程,感興趣的童鞋可以嘗試一下:
            ◆事業部管理員操作員工年假修改,攔截到請求後,把employeeId改成屬於這個公司但是不屬於這個事業部的員工,檢視是否可以修改成功。(溫馨提示:目前事業部沒有做越權校驗,可以操作所有員工,適合上手練習)
            ◆考勤許可權管理員登入並修改員工年假,攔截請求並新增到repeater;公告許可權管理員登入獲取cookie資料;回放請求時換成公告許可權管理員的cookie,檢視是否可以修改成功。

六、實戰演練(Fiddler)

  1. 安裝並配置fiddler

    開啟fiddler按照下圖所示進行設定

    進入設定頁面Tools->Fiddler Options


      配置篩選器,方便攔截我們需要的資料

        

2、安裝chrome的瀏覽器外掛,方便切換瀏覽器代理

        開啟chrome後,直接把字尾為.crx的檔案拖拽到瀏覽器裡,外掛會自動安裝,然後進行如下設定
        


外掛使用技巧->開啟和關閉fiddler代理


外掛使用技巧->讓chrome的隱身視窗也可以使用代理
設定-更多工具-擴充套件程式,勾選SwitchyOmega外掛的在隱身模式啟用

3、開啟兩個chrome視窗,一個為普通模式,一個為隱身模式,分別登入兩個不同的公司賬號,攔截操作介面進行分析

        選中待測介面,按F2可進入編輯模式,修改待測引數後重放(replay)請求檢視結果

       

      

檢視修改引數後的請求的返回結果,並在系統中進行手動操作的驗證。

六、Fiddler與Burp Suite的優缺點

                 1、burp不支援中文,返回值的存在中文時會出現亂碼,需要通過瀏覽器檢視返回值的中文資訊;

                 2、fiddler可以通過顏色來標記介面,burp不支援標記,但它可以把該請求傳送到重放列表裡進行操作,在列表中需要記憶第幾個是公司A的介面,第幾個是公司B的介面;

                 3、由於我們系統是基於chrome瀏覽器開發的並且使用https的安全通訊協議,burp對這兩項支援的不太好;

                 4、如果純做資料攔截推薦fiddler,如果需要做爆破滲透推薦burp。