歡迎關(guān)注訂閱專欄!
WEB安全系列包括如下三個專欄:
- 《WEB安全基礎(chǔ)-服務(wù)器端漏洞》
- 《WEB安全基礎(chǔ)-客戶端漏洞》
- 《WEB安全高級-綜合利用》
知識點全面細(xì)致,邏輯清晰、結(jié)合實戰(zhàn),并配有大量練習(xí)靶場,讓你讀一篇、練一篇,掌握一篇,在學(xué)習(xí)路上事半功倍,少走彎路!歡迎關(guān)注訂閱專欄!
- 專欄文章追求對知識點的全面總結(jié),邏輯嚴(yán)密,方便學(xué)習(xí)掌握。力求做到看完一篇文章,掌握一類漏洞知識。讓讀者簡潔高效的掌握WEB安全知識框架,推開入門深造的大門。
- 絕不為了追求文章數(shù)量,彰顯內(nèi)容豐富而故意拆散相關(guān)知識點。避免讀者沉迷在無盡的技巧中而迷失進(jìn)階的道路!本系列的目標(biāo)是授之以漁,而不僅僅是技巧的堆砌。
- 每篇文章均配有大量靶場,點擊文章中靶場名即可跳轉(zhuǎn)練習(xí)(靶場在網(wǎng)站注冊即可免費使用)。
- 歡迎訂閱專欄!建議學(xué)完兩個基礎(chǔ)專欄,再學(xué)習(xí)高級哦~
1. 什么是業(yè)務(wù)邏輯漏洞
是業(yè)務(wù)邏輯在設(shè)計或具體實現(xiàn)上的缺陷導(dǎo)致攻擊者可以利用的漏洞。攻擊者通常使程序處于不尋常的“狀態(tài)”,導(dǎo)致業(yè)務(wù)邏輯不能正確處理,在這種情況下利用現(xiàn)成的邏輯或函數(shù)達(dá)成惡意的目標(biāo)。
該類漏洞使用自動漏洞掃描器檢測很難發(fā)現(xiàn)。因此,邏輯缺陷通常是測試人員的一個很好的目標(biāo)。
業(yè)務(wù)邏輯漏洞,往往對技術(shù)要求不高,但是需要測試人員有異想天開的腦洞,本文可重點看4.漏洞實例,拓寬下腦洞,見識下一個個不可思議,不可理喻的業(yè)務(wù)邏輯漏洞。
2. 漏洞產(chǎn)生的原因
- 設(shè)計和開發(fā)人員錯誤的預(yù)估用戶的行為,導(dǎo)致用戶實際操作與程序設(shè)計邏輯偏離。
簡單舉例:開發(fā)人員認(rèn)為用戶都是通過瀏覽器進(jìn)行交互訪問,很多驗證可能僅依靠客戶端的驗證。而沒有考慮很多“用戶”使用攔截代理進(jìn)行各種操作。這就造成了大量驗證被繞過,數(shù)據(jù)報文內(nèi)容可能被任意篡改的情況。
- 程序功能過于復(fù)雜,沒有一個團(tuán)隊能完整了解所有功能具體實現(xiàn),導(dǎo)致了錯誤的預(yù)估其他功能,從而產(chǎn)生偏差,易被攻擊者利用。
一個開發(fā)小組錯誤的認(rèn)為另一功能產(chǎn)生的輸入數(shù)據(jù)是可靠的而未進(jìn)行全面驗證。而那個功能開發(fā)團(tuán)隊卻以為后續(xù)處理會進(jìn)行驗證和過濾…
3. 漏洞實際利用
1. 錯誤的信任客戶端驗證
一個根本性的錯誤假設(shè)是,用戶只會通過提供的Web界面與應(yīng)用程序交互。這就像一眼看到未來的“美女老婆”,作為優(yōu)質(zhì)青年怎么可能旁觀呢,早就各種套路深入交流了?,F(xiàn)實如此,網(wǎng)絡(luò)世界更是這般。
例題1、2
2. 非常規(guī)輸入數(shù)據(jù)不能被正確處理
應(yīng)用程序往往在管理庫存、應(yīng)用預(yù)算限制、觸發(fā)供應(yīng)鏈階段對用戶數(shù)據(jù)的內(nèi)容進(jìn)行驗證,判斷是否符合各項規(guī)則條件限制,最終決定能否接受。開發(fā)人員要針對各種可能的輸入類型和場景進(jìn)行驗證功能的實現(xiàn)。
比如,對數(shù)量類型的輸入,有沒有考慮負(fù)數(shù)的情況呢。比如下面的驗證邏輯代碼
$transferAmount = $_POST['amount'];
$currentBalance = $user->getBalance();
if ($transferAmount <= $currentBalance) {
// Complete the transfer
} else {
// Block the transfer: insufficient funds
}
負(fù)數(shù)造成的影響將是災(zāi)難性的。特別是前端有了過濾,而后端恰巧缺失了這一類過濾,會造成問題難以在測試階段被盡早發(fā)現(xiàn)出來。
測試輸入數(shù)據(jù)三問,這有助于盡早發(fā)現(xiàn)漏洞:
- 數(shù)據(jù)限制條件是什么
- 到達(dá)極限條件后,會發(fā)生什么
- 輸入的數(shù)據(jù)有被替換或者標(biāo)準(zhǔn)化嗎
例題3、4、5
3. 設(shè)計時錯誤預(yù)測用戶操作
- 受信任用戶永遠(yuǎn)受信任,不再進(jìn)行后續(xù)驗證。
例題6
- 用戶可以繞過前端強(qiáng)制必填字段,而后端對此沒有驗證
刪除參數(shù)查看系統(tǒng)有無任何異常響應(yīng),力爭跳轉(zhuǎn)至不同的判斷路徑中
- 一次只刪除一個參數(shù),確保每個代碼路徑都能觸發(fā)到
- 分別刪除參數(shù)名和值,服務(wù)器通常會產(chǎn)生不同的處理方式
- 遵循多流程的處理直至完成,有時一個環(huán)節(jié)的參數(shù)(或cookie)改變,會極大影響到后續(xù)步驟。
例題 7、8
- 用戶操作未按流程順序執(zhí)行
正常用戶會按照程序指引一步一步順序完成,但是攻擊者往往會跳過某些步驟,程序若未驗證,則造成漏洞。
例題 9、10、11
- 特定領(lǐng)域的業(yè)務(wù)漏洞
網(wǎng)站某一項特定領(lǐng)域的業(yè)務(wù)邏輯漏洞,
- 營銷促銷領(lǐng)域,打折劵的使用或湊單價格滿足條件金額會突然變化的情況,都是漏洞高發(fā)區(qū)
- 社交媒體粉絲和點贊數(shù),社交媒體業(yè)務(wù)邏輯衍生的漏洞等
例題12、13
- 功能實現(xiàn)明文-加密輸出途徑
當(dāng)用戶可控制的輸入被加密,然后以某種方式向用戶提供所產(chǎn)生的密文時,可能會發(fā)生危險的情況。攻擊者可以使用此輸入來使用正確的算法和非對稱密鑰加密任意數(shù)據(jù)。
攻擊者可定制攻擊荷載內(nèi)容,利用此處功能點,生成符合網(wǎng)站要求的加密cookie
例題 14
4. 漏洞實例
1. 對客戶端控件的過度信任(Excessive trust in client-side controls)
-
目標(biāo)
購買價格昂貴的Lightweight l33t leather jacket
測試賬戶:wiener:peter
- 解題思路
添加產(chǎn)品到購物車環(huán)節(jié),數(shù)據(jù)包中發(fā)現(xiàn),可任意更改價格
POST /cart HTTP/1.1
Host: ac081f251eda4b10c0583dbc00470032.web-security-academy.net
productId=1&redir=PRODUCT&quantity=1&price=1
2. 雙因素認(rèn)證邏輯缺陷(2FA broken logic)
-
目標(biāo)
登陸目標(biāo)賬戶carlos
測試賬戶:wiener:peter
- 解題思路
此題正常登陸邏輯為(攻擊思路見注釋框)
1. 輸入賬號密碼,通過后生成驗證碼發(fā)到登錄人郵箱`POST /login` `GET /login2`
修改數(shù)據(jù)包
verity
值,確保系統(tǒng)已為carlos賬戶生成有效的驗證碼。
GET /login2 HTTP/1.1
Host: ac9f1fea1f713b13c0ca44ec0086002c.web-security-academy.net
Cookie: session=afxODj6T2amYajgf2qNNCB6gKQLSaI0G; verify=carlos
2. 輸入驗證碼 `POST /login2`
使用Burp爆破模塊 對驗證碼進(jìn)行爆破(規(guī)則很簡單,0000~9999遍歷爆破)
3. 完成登陸
3. 高級邏輯漏洞(High-level logic vulnerability)
-
目標(biāo)
購買價格昂貴的Lightweight l33t leather jacket
測試賬戶:wiener:peter
- 解題思路
此題開發(fā)人員忘記設(shè)計驗證數(shù)量為負(fù)的情況,只是驗證了總金額不能為負(fù)數(shù)。本人賬戶有100.所以最終結(jié)賬金額控制在(0~100)即可。其他一樣修改數(shù)據(jù)包即可
4. 低級邏輯缺陷(Low-level logic flaw)
-
目標(biāo)
購買價格昂貴的Lightweight l33t leather jacket
測試賬戶:wiener:peter
- 解題思路
改題思路很簡單,購買總金額在超過極限大之后,突然反轉(zhuǎn),從負(fù)數(shù)開始,需要利用爆破模式,回到0。再搭配其他產(chǎn)品控制100以內(nèi)。
5. 對異常輸入的處理不一致(Inconsistent handling of exceptional input)
- 目標(biāo)
獲取administrator的權(quán)限,并刪除carlos
- 解題思路
這道題思路比較巧妙,可記錄下來備用。
- 注冊時郵箱長度不設(shè)限,但是注冊成功后數(shù)據(jù)庫記錄的有限長度僅為255位。
- 同時發(fā)現(xiàn)admin狀態(tài)只有單位郵箱注冊的人員才能訪問
@dontwannacry.com
- 所以構(gòu)造一個長度遠(yuǎn)超255位的郵箱,此郵箱為攻擊者能收到郵件的郵箱。
many_string@dontwannacry.com.攻擊者郵箱后綴
保證在m處正好是255字節(jié)。
這樣注冊時攻擊者能正常收到郵件獲取驗證連接。應(yīng)用數(shù)據(jù)庫卻已單位郵箱形式存到數(shù)據(jù)庫。從而使攻擊者獲取了單位admin權(quán)限
6. 不一致的安全控制(Inconsistent security controls)
- 目標(biāo)
獲取administrator的權(quán)限,并刪除carlos
- 解題思路
此題問題出現(xiàn)在賬戶頁更換郵箱未做驗證,正常用戶可更換為特定單位郵箱,導(dǎo)致獲取admin權(quán)限
7. 兩用終端上的弱隔離(Weak isolation on dual-use endpoint)
- 目標(biāo)
獲取administrator的權(quán)限,并刪除carlos
測試賬戶wiener:peter
-
解題思路
- 熟悉流程,發(fā)現(xiàn)賬戶頁有修改密碼的功能,抓取數(shù)據(jù)包如下
POST /my-account/change-password HTTP/1.1
Host: ac8d1ff71e005690c0010f4300f00032.web-security-academy.net
csrf=6WiavlTndiXBzv8zpE13UM4R6lGUzCy6&username=wiener¤t-password=peter&new-password-1=123&new-password-2=123
- 修改
username=administrator
刪除¤t-password=peter
,新設(shè)密碼為123 - 再次發(fā)送數(shù)據(jù)包,登陸administrator,密碼已成功修改
8. 密碼重置邏輯缺陷(Password reset broken logic)
- 目標(biāo)
重置賬戶carlos的密碼,并登錄其賬戶
測試賬戶wiener:peter
- 解題思路
此題用測試賬號走一遍流程,經(jīng)測試發(fā)現(xiàn)數(shù)據(jù)包
POST /forgot-password?temp-forgot-password-token=AmG0hPiLCdYdTKba5le0Ywfdt9M7o3MW HTTP/1.1
temp-forgot-password-token=AmG0hPiLCdYdTKba5le0Ywfdt9M7o3MW&username=wiener&new-password-1=123&new-password-2=123
經(jīng)測試去掉token的值,處理依然成功
POST /forgot-password?temp-forgot-password-token= HTTP/1.1
temp-forgot-password-token=&username=wiener&new-password-1=123&new-password-2=123
再次正常啟動流程,用戶名發(fā)起carlos密碼重置。使用上述數(shù)據(jù)包完成重置
9. 雙因素驗證繞過(2FA simple bypass)
- 目標(biāo)
已經(jīng)獲得目標(biāo)賬戶密碼:carlos:montoya,但是需繞過雙因素驗證,訪問carlos首頁
測試賬戶wiener:peter
- 解題思路
賬號密碼驗證后,可在輸入驗證碼環(huán)節(jié),直接更改url到主頁,跳過此環(huán)節(jié)。
10. 工作流驗證不足(Insufficient workflow validation)
- 目標(biāo)
購買商品"Lightweight l33t leather jacket"
測試賬戶wiener:peter
- 解題思路
經(jīng)測試流程發(fā)現(xiàn),流程各環(huán)節(jié)中,最后一步購買確認(rèn)可以單獨發(fā)起。
11. 通過特殊狀態(tài)繞過身份驗證(Authentication bypass via flawed state machine)
- 目標(biāo)
購買商品"Lightweight l33t leather jacket"
測試賬戶wiener:peter
- 解題思路
該題在嘗試跳過一個步驟時采用,直接攔截數(shù)據(jù)包,初始/GET
就攔截,然后丟棄。瀏覽器URL欄直接改為首頁。
12. 業(yè)務(wù)規(guī)則的執(zhí)行存在缺陷(Flawed enforcement of business rules)
- 目標(biāo)
購買商品"Lightweight l33t leather jacket"
測試賬戶wiener:peter
-
解題思路
此題最下方還可以填寫任意郵箱得到驗證碼,所以是兩個驗證碼。發(fā)現(xiàn)可以交替提交無報錯。
13. 無限貨幣的邏輯缺陷(Infinite money logic flaw)
- 目標(biāo)
購買商品"Lightweight l33t leather jacket"
測試賬戶wiener:peter
- 解題思路
網(wǎng)站有兌換幣(相當(dāng)于10元充值卡)購買時花費十元,但是若使用優(yōu)惠劵后,可多賺3元。重復(fù)這個流程指導(dǎo)金額可以購買目標(biāo)商品即可。(另,自動化可使用Burp的插件)
14. 通過加密-明文繞過身份驗證(Authentication bypass via encryption oracle)
- 目標(biāo)
獲取admin權(quán)限,刪除賬戶carlos
測試賬戶wiener:peter文章來源:http://www.zghlxwxcb.cn/news/detail-786897.html
- 解題思路
暫略文章來源地址http://www.zghlxwxcb.cn/news/detail-786897.html
到了這里,關(guān)于不可思議但又無處不在的漏洞,WEB安全基礎(chǔ)入門—業(yè)務(wù)邏輯漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!