1. 程式人生 > >業務邏輯漏洞探索之繞過驗證

業務邏輯漏洞探索之繞過驗證

業務邏輯漏洞探索之繞過驗證

本文中提供的例子均來自網路已公開測試的例子,僅供參考。

本期帶來繞過驗證漏洞。為了保障業務系統的安全,幾乎每個系統都會存在各種各樣的驗證功能。常見的幾種驗證功能就包括賬號密碼驗證、驗證碼驗證、JavaScript資料驗證及服務端資料驗證等等,但程式設計師在涉及驗證方法時可能存在缺陷導致被繞過,於是鬥哥總結了以下幾種繞過驗證的姿勢和大家一起討論討論~
 


客戶端校驗繞過

客戶端校驗是常見的一種校驗方式,也就是在客戶端校驗使用者的輸入,將校驗結果作為引數傳送至服務端,或利用前端語言限制使用者的非法輸入和操作。面對此類的校驗方法可以通過修改前端語言或者在傳輸中對引數進行篡改來繞過驗證。

舉個栗子:



a). 某系統需要購買才能觀看視訊,不同的課程以ID劃分。
 


b).  發現是否付費只靠前端js控制,更改courseID就可以看到不同的課程,recordURL就是視訊播放的連結,無需登入即可播放。
 


c). 根據播放地址中的videoCode,可獲取視訊下載地址:

http://*.*.*.*/v3/resource/video/queryurl?jsoncallback=cb&quality=3&audioIndex=0&types=1&videoCode={videoCode}

所得urls為視訊下載地址。
 


d). 通過指令碼,可將全站視訊下載下來。
 


客戶端驗證資訊洩露

程式設計師在編寫驗證程式時有可能會將驗證資訊直接洩露到客戶端,攻擊者就可以通過分析服務端的返回資料直接獲得關鍵的驗證資訊從而完成驗證。

舉個栗子:

某免費wifi連線時需要使用傳送到手機的密碼進行驗證,抓取傳送密碼的資料包時,發現密碼返回客戶端,導致任意全網賬號可以登入聯網。
 


客戶端流程控制繞過

程式設計師在編寫驗證程式時有可能會驗證結果返回到客戶端,由客戶端根據服務端提供的驗證結果進行下一步操作,攻擊者可以通過篡改驗證結果或直接執行下一步操作實現繞過。

舉個栗子:

a). 某系統重置密碼需要三個步驟,首先要輸入圖片驗證碼。
 


b). 然後需要通過簡訊驗證碼驗證身份。
 


c).訪問http://*.*.*.*/a/user/findPasswordSetp 直接跳到重置密碼的頁面。
 


d). 可成功修改密碼密碼。
 


操作目標篡改繞過

如果某操作採用了連續身份校驗機制或身份校驗過程與操作過程分離,可以嘗試在身份驗證過程中替換身份校驗物件或操作物件實現繞過驗證。

舉個栗子:

a). 修改某系統的繫結手機。
 


b). 選擇免費接收簡訊校驗碼修改。
 


c). 將修改的手機號改為自己的手機號碼。
 


d). 通過修改的手機號碼收到的校驗碼修改手機號。
 



e). 發現可以成功修改成新的手機號。
 


引數篡改

程式猿小哥哥在編寫驗證程式時有可能會對驗證碼欄位進行正確性校驗,但當驗證碼欄位不存在或為空時就直接通過校驗。

舉個栗子:

a).某系統存在繞過驗證漏洞,抓取登入的資料包。
 


b).刪除驗證碼欄位(securityCode)進行爆破。
 


c). 爆破成功,並可以使用爆破出來的賬號密碼進行登入。
 

 


輔助驗證功能繞過

為了驗證使用者身份或者避免攻擊者使用自動化工具進行批量操作,應用程式可能會採用輔助驗證功能,常見的輔助驗證功能包括圖片驗證碼、簡訊驗證碼、郵箱驗證,這些功能在設計時如果存在缺陷則可以被繞過,導致輔助驗證功能失效。

舉個栗子:

a). 訪問某系統,一開始頁面無驗證碼。
 


b). 輸錯一次之後,出現驗證碼。
 


c). 嘗試進行爆破,抓取第一次無驗證碼的資料包,發現會提示需要驗證碼。
 


d). 多次嘗試之後發現,驗證碼是通過cookie中的PHPSESSID來判斷的。
 


e). 修改PHPSESSID後成功繞過驗證碼限制。
 



f). 成功爆出賬號。
 



好啦,鬥哥對於繞過驗證的總結就到這裡啦,對於繞過驗證的修復鬥哥有一點點建議:

1.所有驗證在服務端進行,驗證問題的答案不能以任何形式返回客戶端中(如圖片驗證碼答案、簡訊驗證碼、驗證問題答案等)。

2.驗證結果及下一步跳轉操作由服務端直接進行。

3.應儘可能避免採用連續身份驗證機制,無論採用何種驗證機制,只有當所有的資料輸入以後,才進行身份驗證資料的驗證。