驗證碼:
- 一般用驗證碼來進行登錄暴力破解;防止機器惡意注冊
- 驗證碼的認證流程:
- 客戶端request登陸頁面,后台生成驗證碼:后台使用算法生成圖片,並將圖片response客戶端;同時將算法生成的值全局賦值存到SESSION中。
- 校驗驗證碼:客戶端將認證信息和驗證碼一同提交;后台對提交的驗證碼與SESSION中的進行比較;
- 客戶端重新刷新頁面,再次生成新的驗證碼:驗證碼算法中一般包含隨機函數,所以每次刷新都會改變。
不安全的驗證碼-on client常見問題:
- 使用前端js來實現驗證碼;
- 將驗證碼在cookie中泄露,容易被獲取;
- 將驗證碼在前端源代碼中泄露,容易被獲取。
不安全的驗證碼-on server常見問題:
- 驗證碼在后台不過期,導致長時間可以被使用;
- 驗證碼校驗不嚴格,邏輯出現問題;
- 驗證碼設計的太過簡單和有規律,容易被猜測。
驗證碼繞過(on client):
1.打開Pikachu中的暴力破解--驗證碼繞過(on client)
2.驗證是否存在暴力破解的可能。隨便輸入賬號和密碼,當我們不輸入驗證碼時,會提醒我們輸入驗證碼;當輸入錯誤的驗證碼時,會提醒驗證碼錯誤。接下來輸入正確的驗證碼,提示用戶名或者密碼不存在
3.進行抓包。請求的是POST數據,我們發現多了一個驗證碼
4.查看源碼,我們發現驗證碼的生成是在前端中實現的。在前端中用js來做驗證碼是不安全的,很容易被繞過
5.分析抓到的數據包。將抓到的數據包發送到bp的Repeater模塊,我們對數據進行驗證。修改驗證碼,將驗證碼隨意修改為不存在的或者為空,我呢發現只會提示用戶名或密碼不存在,並不會提示驗證碼錯誤或請輸入驗證碼。所以說這個驗證碼是通過前端中的js來實現的
6.我們將數據包發送到Intruder模塊並對默認的變量進行清除
7.我們將賬號和密碼設置成變量,此時的驗證碼並沒有社么作用,所以不用設置成變量。設置暴力破解方式
8.設置payloads和options與之前相同,進行暴力破解,我們發現賬號是admin密碼是123456的長度與其他的長度不相同,並且在response中顯示登陸成功
驗證碼繞過(on server):
1.打開Pikachu中的暴力破解--驗證碼繞過(on server)
2.確認驗證碼的有效性。當不輸入驗證碼或者輸入驗證碼錯誤時,會提示
3.隨便輸入賬號和密碼並輸入正確的驗證碼,進行抓包
4,將抓到的數據包發送到repeater模塊中,修改驗證碼,看后台是否對驗證碼進行了驗證。提交驗證碼為空,返回提示如下
5.輸入一個錯誤的驗證碼,提示如下。說明后台對驗證碼進行了驗證
6.接下來驗證驗證碼是否存在不過期的問題。刷新頁面,獲取新的驗證碼9vrsyg,不在前台進行登錄,我們將新獲取到的驗證碼輸入到剛剛抓到數據包中,此時我們輸入的是正確的驗證碼,應該返回用戶名和密碼不正確,返回結果與我們猜想的一樣
7.更改用戶名或者密碼的其中一個,正常的應該返回驗證碼不正確;然而返回的結果卻與之前的相同,均為賬號或者密碼不正確。這說明驗證碼被重復使用,存在不過期的問題,所以我們就可以進行暴力破解。
8.接下來進行暴力破解,操作與之前相同。將數據包發送到Intruder模塊,選擇爆破方式,注意此時的驗證碼應填寫正確的驗證碼,使用剛剛刷新得到的驗證碼
9.設置payloads,進行暴力破解。發現賬號為admin密碼為123456的長度與其他長度不同。即得到正確的賬號和密碼。