首先,我們來看下整個驗證碼實現的原理
圖一1.客戶端發起乙個請求
2.服務端響應並建立乙個新的sessionid同時生成乙個隨機驗證碼。
3.服務端將驗證碼和sessionid一併返回給客戶端
4.客戶端提交驗證碼連同sessionid給服務端
5.服務端驗證驗證碼同時銷毀當前會話,返回給客戶端結果
0x01 安全問題及案例
根據上面的實現流程,我們大概可以從四個方面入手,客戶端問題、服務端問題、驗證碼本身問題,還有乙個驗證碼流程設計問題。
客戶端問題
客戶端生成驗證碼
驗證碼由客戶端js生成並且僅僅在客戶端用js驗證
wooyun: 南開大學資訊門戶**設計不當可以爆破使用者密碼(利用密碼猜使用者)
驗證碼輸出客戶端
輸出在html中(神一樣的程式設計師)
wooyun: 索尼驗證碼實現缺陷
wooyun: 某會考報名系統驗證碼繞過可暴力破解(可導致使用者資訊洩露)
驗證碼輸出在cookie中,這個在烏雲中案例也是比較多的。
wooyun: 吉祥航空任意客票遍歷
wooyun: 5173驗證碼可被繞過
服務端驗證碼不過期,沒有及時銷毀會話導致驗證碼復用
這個是最常見的,烏雲上面有大量的案例。
wooyun: 蘇寧易購某系統後台多個超級管理員弱口令(驗證碼可重複利用)
沒有進行非空判斷
很多時候,我們會遺留掉了驗證過程中驗證碼為空的情況
比如去掉cookie中的某些值或者請求中驗證碼引數
wooyun: cmseasy後台暴力破解驗證碼繞過
wooyun: ecshop後台暴力破解驗證碼繞過
wooyun: ecshop繞過驗證碼暴利破解2
產生的驗證碼問題集內的答案非常有限
wooyun: 139郵箱圖驗證碼繞過漏洞(目前圖形驗證碼的可**案例)
其他型別驗證碼繞過
「除錯功能」還是設計缺陷?
wooyun: 阿里巴巴某員工登入介面驗證碼繞過可撞弱密碼
wooyun: 凡客某處驗證碼繞過漏洞
wooyun: 財付通商戶版登入驗證碼繞過
wooyun: 正方教務管理系統設計錯誤,可繞過驗證碼進行暴破或掃弱口令
「逗你玩」型別
有驗證碼,你輸入什麼 ,它都給你過,不驗證
wooyun: 網宿某站sql注入漏洞及驗證碼繞過
萬能驗證碼(後門?)
驗證碼太簡單,容易被機器識別
直接引用豬豬俠的兩個金融案例
wooyun: 銀行業(招商銀行)設計缺陷可被窮舉攻擊
wooyun: 光大**交易系統資金賬號可被窮舉攻擊
0x03修改建議
梳理清楚驗證碼實現邏輯。(包括不限於驗證碼會話及時銷毀等) 驗證碼不要太簡單。扭曲、粘連等。
推薦google的recaptcha
驗證碼安全
目錄後端未對單次驗證碼的有效時間和有效次數限制 或者驗證碼僅在前端校驗,後端不校驗 導致單次驗證碼可多次使用 造成賬號密碼可被列舉 影響驗證碼大小的引數前端可控,如引數在url中 導致可修改引數並利用burp批量發包 造成ddos消耗伺服器資源 後端未對動態驗證碼如簡訊驗證碼的有效域或歸屬做嚴格限定...
驗證碼降噪方法彙總
0.bmp.getpixel i,j toargb color.black.toargb 判斷畫素點顏色是否為黑色。1.這是乙個c 中講bitmap物件方法的博文 經過這幾天的研究想總結下驗證碼預處理的一些方法 驗證碼預處理方法主要有 0.0 上下腐蝕 對於斜線效果比較好,是橫線用水平腐蝕,豎線用垂...
web安全問題彙總
web 安全問題總結 一,資料庫安全性 1,mssql資料庫安全性 l web中不允許使用sa級的使用者連線資料庫 解決方法 2,access資料庫安全性 解決方法 u 第一步 新建乙個表。u 第二步 在表中建乙個字段,名稱隨意,型別是ole物件,然後用asp 向字段中新增一條記錄寫入單位元組的 為...