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