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