本文中提供的例子均來自網絡已公開測試的例子,僅供參考。
本期帶來繞過驗證漏洞。爲了保障業務系統的安全,幾乎每個系統都會存在各種各樣的驗證功能。常見的幾種驗證功能就包括賬號密碼驗證、驗證碼驗證、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.應儘可能避免採用連續身份驗證機制,無論採用何種驗證機制,只有當所有的數據輸入以後,才進行身份驗證數據的驗證。