驗證碼機制主要被用於防止暴力破解、防止DDOS攻擊、識別用戶身份等,常見的驗證碼主要有圖片驗證碼、郵件驗證碼、短信驗證碼、滑動驗證碼和語音驗證碼。
以短信驗證碼為例。短信驗證碼大部分情況下是由4~6位數字組成,如果沒有對驗證碼的失效時間和嘗試失敗的次數做限制,攻擊者就可以通過嘗試這個區間內的所有數字來進行暴力破解攻擊。
測試方法:
攻擊者填寫任意手機號碼進行註冊,服務器向攻擊者填寫的手機號碼發送短信驗證碼,攻擊者設置驗證碼範圍000000-999999、
00000-99999、0000-9999,對驗證碼進行暴力破解,通過返回數據包判斷是否破解成功,然後通過破解成功的驗證碼完成註冊。
修復建議:
a.設置驗證碼的失效時間,建議為180秒;
b.限制單位時間內驗證碼的失敗嘗試次數,如五分鐘內連續失敗5次即鎖定該賬號15分鐘。
0x02:驗證碼重復使用測試
在網站的登錄或評論等頁面,如果驗證碼認證成功後沒有將session及時清空,將會導致驗證碼首次認證之後可重復使用。
測試時可以抓取攜帶驗證碼的數據包重復提交,查看是否提交成功。
測試方法:
修復建議:
針對驗證認證次數問題,建議驗證碼在壹次認證成功後,服務端清空認證成功的session,這樣
就可以有效防止驗證碼壹次認證反復使用的問題。
0x03:驗證碼客戶端回顯測試
當驗證碼在客戶端生成而非服務器生成時,就會造成此類問題。當客戶端需要和服務器進行交互發送驗證碼時,可借助瀏覽器的工具查看客戶端與服務器進行交互的詳細信息。
測試方法:
攻擊者進入找回密碼頁面,輸入手機號與證件號,獲取驗證碼,服務器會向手機發送驗證碼,
通過瀏覽器工具查看返回包信息,如果返回包中包含驗證碼,證明存在此類問題。
修復建議:
1、禁止驗證碼本地客戶端生成,應采用服務器驗證碼生成機制;
2、設置驗證碼的時效性,如180秒過期;
3、驗證碼應隨機生成,且使用壹次即失效。
0x04:驗證碼繞過測試
通過修改前端提交服務器返回的數據,可以實現繞過驗證碼,執行我們的請求。
測試方法:攻擊者進入註冊賬戶頁面,輸入任意手機號碼,獲取驗證碼,在註冊賬號頁面填寫
任意驗證碼,提交請求並抓包,使用抓包工具查看並修改返回包信息,轉發返回數據包,查看是
否註冊成功。
修復建議:建議在服務端增加驗證碼的認證機制,對客戶端提交的驗證碼進行二次校驗。
0x05:驗證碼自動識別測試
出自來自web攻防之業務安全