邏輯至上——內(nèi)含各種酷炫姿勢(shì)
前言
與傳統(tǒng)類型漏洞相比,邏輯漏洞具有不易發(fā)現(xiàn)、不易防護(hù)的特點(diǎn),不像SQL注入、XSS有像WAF那樣現(xiàn)成的防護(hù)手段;而且,每個(gè)企業(yè)的業(yè)務(wù)邏輯參差不齊,也形成了千奇百怪的邏輯漏洞。下面就和大家分享一下我都是從哪些維度去發(fā)現(xiàn)邏輯漏洞的。
一、未授權(quán)
形成未授權(quán)的原因一般是由于代碼未做登錄驗(yàn)證或者登錄驗(yàn)證失效引起,從而使后臺(tái)或者帶有敏感信息的頁(yè)面直接裸露在公網(wǎng)。
site:在baidu、Google、bing、360等搜索引擎中使用site命令去搜索所要查詢的域名信息,因?yàn)榇藭r(shí)搜索以“全”為目的,所以不需要加任何搜索條件。
比如想查詢a.com下的未授權(quán),site:a.com即可。一般看搜索結(jié)果前十頁(yè)。如果遇到被搜索引擎收錄過多的域名,這時(shí)就需要加一些條件了,具體可以參考site命令用法。通過site命令,一般會(huì)很容易發(fā)現(xiàn)某個(gè)域名下的后臺(tái)地址和直接暴露在公網(wǎng)的敏感信息頁(yè)面。
域名爆破:通過爆破發(fā)現(xiàn)更多的二級(jí)、三級(jí)域名,然后導(dǎo)出域名列表通過腳本查看域名banner名稱,或者挨個(gè)手工訪問,觀察是否有未授權(quán)登錄的后臺(tái)。一般大家都使用layer子域名挖掘和subDomainsBrute來進(jìn)行子域名發(fā)現(xiàn)。
端口及banner掃描:端口不容小視,很多運(yùn)維自作聰明,把后臺(tái)或者其它管理系統(tǒng)直接改個(gè)非80端口綁定到公網(wǎng)。可以通過namp對(duì)域名所在ip段內(nèi)的服務(wù)器進(jìn)行端口掃描,生成ip+端口列表,然后通過腳本批量獲取http banner。夫子通過這種方法成功發(fā)現(xiàn)并進(jìn)入了各種知名互聯(lián)網(wǎng)公司后臺(tái),當(dāng)然,漏洞都已提交給他們的src了。
域名關(guān)聯(lián):目前有很多公司的域名是未做域名隱私保護(hù)的,可以通過whois查詢某個(gè)域名所有人還擁有哪些域名,然后重復(fù)上述步驟。
二、登錄與賬戶
一個(gè)業(yè)務(wù),如果登錄或者賬戶信息出現(xiàn)漏洞,信息被一些不法分子利用,可能出現(xiàn)類似電信詐騙的現(xiàn)象。
圖形驗(yàn)證碼:很多后臺(tái)/前臺(tái)在登錄或注冊(cè)時(shí),是沒有圖形驗(yàn)證碼的。這也就給爆破帶來了便利。讓人更不可思議的是,很多驗(yàn)證碼只是個(gè)擺設(shè),哪怕輸入錯(cuò)誤的驗(yàn)證碼也能提交。
短信驗(yàn)證碼:在app盛行的時(shí)代,短信登錄更為便捷,所以在使用過程中也產(chǎn)生了諸多問題。
例如很多app登錄時(shí)使用4位純數(shù)字作為手機(jī)驗(yàn)證碼。如果用戶基數(shù)較大,在某一時(shí)間段,會(huì)有部分人使用同一個(gè)手機(jī)驗(yàn)證碼登錄。如果通過大量撞庫(kù),可能登錄他人賬號(hào);又因?yàn)槭?位驗(yàn)證碼,如果單一賬號(hào)也沒限制短信登錄重試次數(shù),同時(shí)也存在通過爆破4位驗(yàn)證碼登錄的現(xiàn)象。
賬號(hào)登錄回顯與注冊(cè):很多開發(fā)者或者產(chǎn)品,為了提升體驗(yàn),在設(shè)計(jì)開發(fā)系統(tǒng)登錄功能時(shí)會(huì)加一些友好的提示信息。比如提示“該用戶不存在”、“該用戶已注冊(cè)”,這無疑是一個(gè)變相的撞庫(kù)漏洞。在撞庫(kù)之前,測(cè)試者一般都先搜集好精確的用戶名字典,而提示用戶不存在或登錄時(shí)不存在的用戶請(qǐng)求返回字節(jié)不一樣,都構(gòu)成了撞庫(kù)。
明文密碼登錄:不少應(yīng)用在登錄時(shí)使用了明文密碼登錄,或者使用未加鹽的md5,或者使用了外圍人員不知道的加密方法,這些都是不可靠的。
拿加鹽的md5值作為密碼登錄為例。登錄時(shí),只需在burp這類工具拿出幾個(gè)常用密碼加密后的密文,即可實(shí)現(xiàn)fuzz。終究的防護(hù)辦法還是登錄時(shí)加入簽名,簽名一旦被篡改,就無法登錄。
賬號(hào)及其它個(gè)人信息篡改:通過抓包方式對(duì)賬號(hào)信息進(jìn)行攔截,如手機(jī)號(hào)、uid、郵箱、token,篡改后提交數(shù)據(jù)包,從而達(dá)到登錄別人賬號(hào)的目的。一般防護(hù)辦法是使用多個(gè)參數(shù)進(jìn)行驗(yàn)證,當(dāng)滿足所有條件時(shí)才驗(yàn)證通過。
密碼重置:密碼重置也是一個(gè)重災(zāi)區(qū),常見的密碼重置繞過方式有數(shù)字驗(yàn)證碼繞過,比如4位數(shù)字,通過爆破進(jìn)行;有的通過修改返回結(jié)果,如把false改成true。還有的可以構(gòu)造密碼重置鏈接。這部分夫子接觸較少,更多姿勢(shì)可以參考烏云鏡像案例。
三、越權(quán)
越權(quán)漏洞是邏輯安全中的重中之重,由于產(chǎn)品、研發(fā)追趕項(xiàng)目進(jìn)度,會(huì)在項(xiàng)目開發(fā)過程中損耗一些安全屬性。接下來我們看一下比較典型的越權(quán)漏洞,這些越權(quán)漏洞一旦發(fā)生,危害等同于脫褲。
訂單遍歷:訂單遍歷一般發(fā)生在三種場(chǎng)景,分別是前臺(tái)訂單遍歷、后臺(tái)訂單遍歷、前后臺(tái)訂單遍歷。
1. 前臺(tái)訂單遍歷指的是你在某平臺(tái)購(gòu)物或者下單訂了個(gè)外賣,然后在查看訂單時(shí)發(fā)現(xiàn)訂單id為一串有規(guī)律的數(shù)字,這時(shí)可能通過變換id數(shù)字就可以查看他人訂單信息了。
2. 后臺(tái)訂單遍歷指的是一些管理后臺(tái),在前端展現(xiàn)的時(shí)候,每個(gè)用戶只能查看系統(tǒng)分配給自己的一些訂單信息。但是通過burp抓包進(jìn)行fuzz時(shí),多數(shù)都可越權(quán)查看其它賬戶下的訂單信息,這就成了一個(gè)變相的脫褲。防護(hù)策略就是將訂單id加密或者變成一串很大的數(shù)字,這樣一來也就無法遍歷。
3. 剛才說了兩種場(chǎng)景,接下來說一下第三種場(chǎng)景。這個(gè)姿勢(shì)稍微有點(diǎn)淫蕩,我把這個(gè)場(chǎng)景稱為前后端訂單遍歷。舉個(gè)例子,當(dāng)我們?cè)谀惩赓u提交訂單時(shí),信息里面會(huì)包含一個(gè)訂單號(hào),而這個(gè)訂單需要一個(gè)商家端來接單。商家端接單時(shí)可以抓包,然后就可以進(jìn)行訂單遍歷了。當(dāng)然,前提是你得有一個(gè)商家端。
商家資質(zhì)遍歷:商家在運(yùn)營(yíng)過程中,會(huì)向平臺(tái)提交一些身份證、營(yíng)業(yè)執(zhí)照等敏感信息。一些服務(wù)端為了方便保存,直接對(duì)上傳文件以用戶id或者一串?dāng)?shù)字保存,這樣一來可能通過改id就可獲取其它商家信息。修復(fù)辦法就是將文件名稱進(jìn)行hash命名。
取消他人訂單、惡意刷評(píng):取消訂單時(shí)對(duì)訂單號(hào)進(jìn)行攔截篡改,從而達(dá)到取消他人訂單的目的;評(píng)論時(shí)更換評(píng)論者id,從而實(shí)現(xiàn)惡意刷好評(píng)、差評(píng)的目的。
四、支付
你想買個(gè)紅色的愛瘋7,于是給自己購(gòu)物賬戶充值了5000軟妹幣,等你下單完畢后,發(fā)現(xiàn)賬戶余額變成了10000,這是為什么呢?
金額篡改:在下單時(shí),通過攔截篡改支付額度后提交請(qǐng)求,一般會(huì)看到出其不意的效果,如把訂單金額改小、改成負(fù)數(shù)。造成這一現(xiàn)象的原因是服務(wù)器端對(duì)金額未做二次校驗(yàn)。
充值與提現(xiàn):充值和提現(xiàn)過程中都可能存在漏洞。
1. 充值一般會(huì)出現(xiàn)兩種漏洞:
一種是少充多得,比如充值100元時(shí)通過篡改金額改成10元,最終充值完畢后賬戶變成了100元,而實(shí)際付款卻只有10元;
另一種是繞過活動(dòng)頁(yè)金額限制,比如很多公司做活動(dòng)強(qiáng)制用戶充值金額不能低于10000,而通過攔截修改金額,可以充值任意金額。
2. 接下來我們?cè)僬f說提現(xiàn):
提現(xiàn)一般也是由于服務(wù)器端參數(shù)校驗(yàn)不嚴(yán)格,會(huì)經(jīng)常存在一些信息泄露、無限提款的漏洞。一般提現(xiàn)時(shí),我們可以通過篡改提現(xiàn)額度、銀行卡號(hào)來實(shí)現(xiàn)。防護(hù)手段是手機(jī)號(hào)、姓名、銀行卡賬戶、額度四個(gè)統(tǒng)一。
數(shù)量、商品/優(yōu)惠id篡改:下單時(shí),通過攔截篡改商品數(shù)量、商品id、優(yōu)惠券等信息。如把數(shù)量改為一正一負(fù)、如替換優(yōu)惠券滿減id。
比如你有2張優(yōu)惠券,一張id為1的優(yōu)惠券滿100減10塊,一張id為2的優(yōu)惠券滿200減20。這時(shí)你買了100塊錢的物品,勾選了滿100減10塊的優(yōu)惠券,提交請(qǐng)求時(shí)把優(yōu)惠卷id1篡改成了2,結(jié)果只支付了80塊錢。
支付上的漏洞遠(yuǎn)不止這些。如果想深挖,可以嘗試實(shí)現(xiàn)多個(gè)組合,通過頻繁組合與篡改,觀察效果。
五、API
現(xiàn)在是app盛行的時(shí)代,客戶端使用API與服務(wù)器端進(jìn)行數(shù)據(jù)傳輸,所以API安全問題頻出,接下來說一下API常見的安全問題。
參數(shù)校驗(yàn):舉個(gè)例子,你在某個(gè)app內(nèi)充值話費(fèi),返回查看訂單時(shí)url參數(shù)包含了手機(jī)號(hào)、銀行卡、充值金額,你通過改變手機(jī)號(hào),獲取到了其它用戶的充值信息(銀行卡號(hào)、金額)。這樣你便獲取了一一對(duì)應(yīng)的手機(jī)號(hào)和銀行卡,是不是很恐怖呢?其實(shí)這也是典型的平行越權(quán)。
短信郵箱炸彈:短信和郵箱經(jīng)常出現(xiàn)的漏洞分為兩種。一種是無任何頻率限制,利用者可以無限制對(duì)目標(biāo)手機(jī)號(hào)或者郵箱發(fā)送垃圾短信/郵件;另一種是對(duì)短信/郵件內(nèi)容實(shí)現(xiàn)篡改。
關(guān)鍵參數(shù)不加密:如同上面說的訂單號(hào)、銀行卡號(hào)、身份證等敏感信息,這類數(shù)據(jù)要進(jìn)行hash,從而減少被直接明文越權(quán)/遍歷的風(fēng)險(xiǎn)。
分享了這么多,說說這兩年從接觸安全到能發(fā)現(xiàn)邏輯漏洞的一些心得。
1. 有棗沒棗先打三竿:上來先動(dòng)手跑幾十萬數(shù)據(jù)試試,畢竟光看是看不出安全漏洞細(xì)節(jié)的。
2. 觀察每一個(gè)參數(shù):邏輯問題重要的是測(cè)業(yè)務(wù)邏輯,所以每條http請(qǐng)求都不能放過,每個(gè)參數(shù)也要盡可能知道是干啥的,看看能不能改變某個(gè)參數(shù)引起異常返回結(jié)果。
3. 大膽假設(shè):不要以為互聯(lián)網(wǎng)巨頭沒安全漏洞,往往是比小公司安全問題更多。只有想不到,沒有做不到。
4. 時(shí)間投入:一些漏洞,真不是1-2天能發(fā)現(xiàn)的,很多時(shí)候需要耗時(shí)幾天甚至更久,需要分析業(yè)務(wù)請(qǐng)求才能發(fā)現(xiàn),所以要頭腦冷靜急不得。