逻辑漏洞笔记
越權漏洞是很多應用中比較常見的漏洞類型,它是在授權邏輯上存在安全缺陷導致的問題。在基于用戶提供的輸入對象直接訪問,而未進行有效鑒權,導致一些超出預期的操作行為,可能導致信息泄露或者提權,具體危害的大小取決于業務場景,所以對越權漏洞的理解依賴于你對業務邏輯的理解深度。
當前國際上習慣將越權漏洞稱為 IDOR(Insecure Direct Object Reference,不安全的對象引用),在 HackerOne 上公開的漏洞案例中,你以關鍵詞 IDOR 去搜索,就可以找到不少真實的企業漏洞案例。
越權漏洞的分類
根據越權對象的差異,可以分析水平越權和垂直越權。
1.水平越權
假設用戶 A 與用戶 B 屬于相同權限等級的用戶,當用戶 A 能夠訪問用戶 B 的私有數據時,就稱為水平越權。
以 Pikachu 靶場的水平越權題目為例,下圖是個登錄界面,先點擊下“點一下提示”獲得 3 個賬號及其密碼:
lucy/123456
lili/123456
kobe/123456
先用 lucy 的賬號密碼登錄,點擊“點擊查看個人信息”,頁面返回 lucy 的個人信息:
同時用 Chrome Network 抓包,得到查看個人信息的 GET 請求地址和參數:
前面已經密碼驗證過了,如果此時修改 username 為其他賬號,是否會獲得其他用戶的個人信息呢?
下面修改 username 為 lili,發起請求:
如上圖所示,成功獲取 lili 的個人信息,說明這里存在越權漏洞,且屬于水平越權,因為從原定權限看,兩者的權限等級是相同的。
2.垂直越權
假設用戶 A 是普通用戶,用戶 B 是管理員,當用戶 A 能夠訪問用戶 B 的私有數據時,就稱為垂直越權,又稱為權限提升。
以 Pikachu 靶場的垂直越權題目為例,如下圖所示,它也是個登錄界面,先點擊下“點一下提示”獲得 2 個賬號及其密碼,其中 admin 是管理員賬號:
admin/123456
pikachu/000000
分別登錄這 2 個賬號看下有啥區別,下圖是 admin 登錄后返回的信息,可以看它擁有添加和刪除用戶的權限:
為方便后面測試,先記錄添加與刪除用戶的請求數據。
先點擊用戶 vince 一行所在的“刪除”按鈕,刪除用戶 vince 并抓包,得到請求數據:
再點擊“添加用戶”,然后填寫信息并點擊“創建”:
同時抓包獲得請求數據:
我們再回頭登錄看下普通用戶 pikachu 登錄后的情況。
試想下,普通用戶 pikachu 如何才能擁有 admin 一樣的增加與刪除用戶的權限呢?
在當前用戶為 pikachu 的情況下,嘗試刪除用戶,構造如下請求去刪除 id=2 的用戶:
http://127.0.0.1:8080/vul/overpermission/op2/op2_admin.php?id=2
訪問后 302 跳轉到登錄界面,且并沒有刪除成功,說明這里沒有越權漏洞。
接下來看看添加用戶的接口是否存在越權,在當前用戶為 pikachu 的情況下,構建如下請求,添加一個用戶名密碼均為 hacker 的賬號:
這里我使用 HackBar 去構造 POST 請求,請求后會跳轉到登錄界面,重新用 pikachu 登錄可以看到 hacker 賬號已經創建成功,說明我們已經越權成功,這里屬于提升權限,所以它屬于垂直越權漏洞。
越權漏洞的檢測與利用
對于越權漏洞的檢測與利用基本是一回事,因為它偏于業務邏輯缺陷,當你檢測到的時候,基本等同于利用了,所以此處我把它們放在一塊兒談。
越權漏洞的檢測與利用,長期以來大多是以手工測試或半自動測試為主,因為背后涉及一些業務邏輯功能的理解。對于自己公司內部業務做一些定制化的全自動檢測也是可行的,比如掌握各類用戶權限情況、涉及權限驗證的敏感操作請求等等情況,就可以嘗試自動切換用戶或刪除登錄態去執行敏感操作,以此判斷是否存在越權漏洞,再進行人工最終確認。
關于自動化掃描越權漏洞,推薦《越權掃描器碎碎念》一文。
下面我會介紹一些用來檢測越權漏洞的常用工具,主要是一些 BurpSuite 插件,都可以通過 BurpSuite 插件庫 BApp Store 找到并安裝,不過安裝速度可能很慢,甚至是多嘗試幾次才能安裝成功。
這種情況可以嘗試手工安裝,先從 BApp Store 官網下載插件的 bapp 文件到本地,然后點擊“Manual install …”選擇下載的文件進行安裝。
下面介紹的這些工具都是刷漏洞獎勵平臺的利器,而且越權漏洞跟別人撞洞的概率也會相對低些,有些獎金也不低。
1.Authz
Authz 的使用比較簡單,在 BurpSuite 中將需要測試的請求發送到 Authz,之后修改 Cookie 值為其他用戶,也可以是其他請求頭信息,待準備測試的請求收集完后,點擊“Run”按鈕即可。如果原響應內容長度、狀態碼和被修改請求后的響應內容長度、狀態碼一致,則會被標為綠色,表示可能存在越權漏洞。
以普通用戶 pikachu 直接訪問綠色的 URL,可以直接打開“添加用戶”的界面進行操作,這原來是管理員 admin 才擁有的權限,非常明顯的越權行為。
2.Autorize
Autorize 會對客戶端發送的所有請求數據進行修改后重放,主要是將其他用戶的 Cookie 替換當前用戶的 Cookie,或者其他授權驗證相關的請求頭。
Autorize 不用像 Authz 那樣挑選請求并發送到插件,它可以直接配置要替換的頭信息,包括 Cookie 或者其他驗證頭信息,同時支持作用域過濾器,用來篩選我們感興趣的請求,避免收到大量的無用結果。
之后也是通過對比修改前后的響應結果來判斷越權漏洞是否存在,若響應長度和狀態碼一樣,那就有可能存在越權漏洞。不過,有時候也需要人工難證下,有可能一些頁面本身就是允許任意用戶訪問的,需要分析下原設定的正常業務邏輯。
3.Auto Repeater
像 Authz 這種挑選請求并發送到插件的方式,測試效率會低一些,沒有 Auto Repeater 高效。
Auto Repeater 功能相對 Autorize 更多更復雜一些,可以理解為是它的擴展版,是基于自動請求重放與響應比對的方式進行檢測的,它可以對更加具體的請求參數進行測試,比如 PHPSESSID、SID、UID 等涉及用戶身份的參數,支持正則匹配與替換。
點擊“Active AutoRepeater”開啟,再添加替換規則。比如,我想替換 Cookie 中的 PHPSESSID 參數值,可以在 Replacements 中添加替換規則,然后在 Base Replacements 下為 cookie 配置一個規則,Type 選擇“Match Cookie Name, Replace Value”Match 設置為 Cookie 名稱 PHPSESSID,替換為權限較低的用戶的 Cookie 值。
在之后的捕獲的請求中,若滿足匹配條件就會自動修改數據并重新發送請求,用戶再根據響應結果是否有差異來判斷是否存在越權漏洞,可以通過 Logs 設置顏色標記來區分,避免請求過多時,浪費過多時間排查驗證。
防御越權漏洞
由于越權漏洞涉及業務邏輯,靠 WAF、RASP 那些安全系統是沒有用的,更重要的是在開發設計時提前考慮好權限控制與校驗問題,可以嘗試從以下幾方面入手:
總結
- 上一篇: 网络电话VOIP技术解析
- 下一篇: 18个最好的代码编辑器/IDE工具