一、什么是越權漏洞?它是如何產生的?
越權漏洞是Web應用程序中一種常見的安全漏洞。它的威脅在於一個賬戶即可控制全站用戶數據。當然這些數據僅限於存在漏洞功能對應的數據。越權漏洞的成因主要是因為開發人員在對數據進行增、刪、改、查詢時對客戶端請求的數據過分相信而遺漏了權限的判定。所以測試越權就是和開發人員拼細心的過程。
二、越權漏洞的分類?
主要分為水平越權和垂直越權,根據我們的業務通俗的表達一下這兩者的區別:
水平越權:兩個不同的公司A和B,通過修改請求,公司A可以任意修改B公司的員工、部門、考勤等信息;
垂直越權:同一個公司不同權限的管理員A和B,通過修改請求,管理員A可以修改不在他管轄范圍內的員工的部門、考勤、工資等信息;
三、測試越權漏洞需要用到哪些工具?
推薦一:【BurpSuite】+【firefox】
推薦二:【fiddler】+【fiddler】+【SwitchyOmega】
推薦的這兩套工具都可以完成越權測試,用哪個都可以。
四、如何查找越權漏洞?
在與服務器進行數據交互時客戶端攜帶着標識用戶的身份的cookie,當服務端的session與cookie中的身份匹配成功后,才能允許該用戶進行相關操作(cookie和session的關系-->一彈、二彈)。除了cookie之外,在請求中可能會帶一些參數,細覽下可能存在辨別信息的唯一值,來進行測試。這里要說一點,傳輸的參數並不一定在請求參數中,也有可能存在URL鏈接的位置(GET和POST請求的區別)。當攔截一個請求后分析是否有參數:
1、請求中不存在參數,只用cookie進行身份驗證,無法水平越權,可能出現垂直越權;
2、請求中存在參數,並且參數中的某些值可能是辨別信息的唯一值(如employeeID、departmentID、ID等),可能存在水平和垂直越權;越權的原因是參數中的employeeID沒有判斷是否是cookie中用戶所管轄的員工ID。
五、實戰演練(Burp Suite)
-
下載安裝burpsuite
burpsuite需要java運行環境,所以必須先安裝JDK並配置好環境變量-->JDK下載及環境變量配置教程
配置好環境后雙擊.jar文件,彈出窗口無腦直接點擊next即可打開(如果需要加載配置文件才需要勾選其他選項);切換到proxy模塊,點擊一下intercept is on按鈕停止攔截數據。如圖1 -
給瀏覽器安裝證書用以訪問https
首先打開firefox,在地址欄輸入burpsuite的默認監聽地址及端口127.0.0.1:8080,點擊CA Certificate下載並保存證書cacert.der,如圖二
接着依次點擊firefox的菜單->選項->高級->證書->查看證書->證書機構->導入,選擇剛才下載的cacert.der,在彈出的窗口中勾選“信任此CA標識的網站”,最后點擊確定,如圖三。 -
打開待測網站,攔截對應操作的請求數據
尋找網站中可以對數據進行增刪改查的地方,比如我們要測試一下調整年假的操作是否存在越權時,先操作修改年假數量,然后在點擊保存之前打開intercept的攔截開關,最后再點擊確定按鈕,就會攔截到請求數據,如圖四
-
分析該請求是否有越權的可能
從攔截到的請求中我們可以看出,修改年假的操作使用的是POST請求,調用了接口/attendance/ajax-save-annual-adjust-days,並傳遞了參數employeeId、year、adjustDays。在這三個參數中明顯可以看出employeeId是判斷該條請求身份的參數,雖然cookie中存在QJYDID、WAVESSID、JSESSIONID等身份驗證,但是如果開發人員沒有判斷這個employeeId是否是該cookie身份所在公司下的員工時,就會存在越權漏洞,導致修改任意employeeId就能操作年假的修改,不需要所屬公司的限制。 -
把可能存在的越權的請求發送到repeater備用
repeater模塊的功能就是對請求進行重放(repeat:重復),重放前我們可以對請求和參數任意修改。(直接在intercept模塊修改參數,再點擊forward放行也是可以的)
在請求數據頁面點擊右鍵,選擇“Send to Repeater”,該請求自動復制到repeater模塊,如圖五 -
關閉intercept的攔截開關,點擊“intercept is on”后開關變為“intercept is off”就是關閉了
-
修改參數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的年假沒有變化:雖然返回數據為true,但是實際沒有改變數值,這可以看做不存在越權漏洞; -
解決中文亂碼
-
上面我們進行了水平越權的測試,想一想垂直越權怎么做呢?
水平越權是測試不同公司之間是否可以互相操作,垂直越權是測試同一公司不同權限的管理員是否可以操作不屬於他管轄范圍內的員工等。
大概說一下垂直越權測試流程,感興趣的童鞋可以嘗試一下:
◆事業部管理員操作員工年假修改,攔截到請求后,把employeeId改成屬於這個公司但是不屬於這個事業部的員工,查看是否可以修改成功。
◆考勤權限管理員登錄並修改員工年假,攔截請求並添加到repeater;公告權限管理員登錄獲取cookie數據;回放請求時換成公告權限管理員的cookie,查看是否可以修改成功。