暴力破解&暴力破解漏洞概述
暴力破解
連續性嘗試 + 字典 + 自動化
字典
一個有效的字典,可以大大的提高暴力破解的效率
- 常用的賬號密碼(弱口令),比如常用用戶名/密碼TOP500等
- 互聯網上被脫褲后賬號密碼(社工庫),比如CSDN當年泄漏的約600w用戶信息。
- 使用指定的字符使用工具按照指定的規則進行排列組合算法生成的密碼。
如果一個網站沒有對登錄接口實施防暴力破解的措施,或者實施了不合理的措施。則該稱該網站存在暴力破解漏
比如
√是否要求用戶設置了復雜的密碼
√是否每次認證都使用安全的驗證碼;
√是否對嘗試登錄的行為進行判斷和限制;
√是否在必要的情況下采用了雙因素認證;
等等。
暴力破解漏洞測試流程
- 確認登錄接口的脆弱
確認目標是否存在暴力破解的漏洞。(確認被暴力破解的“可能性”)
比如:嘗試登錄—抓包-觀察驗證元素和 response信息,判斷否存在被暴力破解的可能。 - 對字典進行優化
根據實際的情況對字典進行優化,提高爆破過程的效率。 - 工具自動化操作
python或 burpsuite
配置自動化工具(比如線程、超時時間、重試次數等),進行自動化操作。
技巧
根據注冊提示信息進行優化
對目標站點進行注冊,搞清楚賬號密碼的一些限制,比如目標站點要求密碼必須是6位以上,字
母數字組合,則可以按照此優化字典,比如去掉不符合要求的密碼
技巧
如果爆破的是管理后臺,往往這種系統的管理員是 admin/ administrator/root的機率比較高
可以使用這三個賬號+隨便一個密碼,嘗試登錄,觀看返回的結果,確定用戶名。
√輸入Xxyy回“用戶名或密碼錯誤”;
√輸入 admin/y返回“密碼錯誤”,則基本可以確定用戶名是 admin
因此可以只對密碼進行爆破即可,提高效率。
基于表單的暴力破解(基于 burp suite)
burpsuite的文檔
我們使用burpsuite進行暴力破解
proxy模塊
burpsuite充當瀏覽器和web站點之間的代理,可以對HTTP請求進行修改
intruder模塊
Intruder模塊可以通過刈http request的數據包以變量的方式自定義參數,然后根據對應策略進行自動化的重放。常用于自動化猜測/暴力破解過程中
targe選項卡
設置攻擊目標,可以通過prox發送
Pasitions選項卡
指定需要暴力破解的參數并設置成變量,同時選擇攻擊模式
Sniper:狙擊手
設置一個 payload,,先將第一個變量使用字典進行測試,然后在將第二個變量使用字典進行測試
Battering ram沖撞車
設置一個 payload,所有的變量一起用字典內容被替換,然后一起嘗試
Ptichfork:草叉型
每個變量設置一個 payload,分別使用對應的字典對變量進行同時替換
Cluster bomb:集束炸彈
需要為每個變量設置一個 payload,分別使用字典內容組合對變量進行替換
Payloads選項卡
設置字典,并可以對字典進行統一的策略處理
options選項卡
對掃描的線程、失敗重試等進行配置
對結果設置匹配的fag:通過一個標識符來區別結果,并在結果欄中flag出來
可以根據返回結果是否含有flag或者響應的長度來判斷是否爆破成功
暴力破解之不安全的驗證碼分析
驗證碼的作用
√登錄暴力破解
√防止機器惡意注冊
驗證碼的認證流程
S1 客戶端 request登錄頁面,后臺生成驗證碼:
1后臺使用算法生成圖片,并將圖片 response給客戶端,同時將算法生成的值全局賦值存到 SESSION中
校驗驗證碼:
S2 客戶端將認證信息和驗證碼一同提交
后臺對提交的驗證碼與 SESSION里面的進行比較
S3 客戶端重新刷新頁面,再次生成新的驗證碼
驗證碼算法中一般包含隨機函數,所以每次刷新都會改變;
on-client
前端可能出現的問題
- 使用前端js實現驗證碼(紙老虎)
- 將驗證碼在 cookie中泄露,容易被獲取;
- 將驗證碼在前端源代碼中泄露,容易被獲取
在前端使用js設置的安全機制是可以被繞過的,比如在前端進行驗證碼的生成和驗證,就很容易繞過形同虛設
on-server
驗證碼后端處理可能存在的問題
- 驗證碼在后臺不過期,導致可以長期被使用
- 驗證碼校驗不嚴格,邏輯出現問題;
- 驗證碼設計的太過簡單和有規律,容易被猜解 可以使用機器視覺的方式來
識別
一般后臺將驗證碼字符串存儲在會話中,當驗證一次驗證碼,應該立即銷毀這個變量
Token可以防暴力破解嗎?
一般的做法
1將 token以"type=" hidden"的形式輸出在表單中
2在提交的認證的時候一起提交,并在后臺對其進行校驗;
但是由于其 token值輸出在了前端源碼中,容易被獲取,因此也就失去了防暴力破解的意義
一般 Token在防CSRF上會有比較好的功效
暴力破解常見的防范措施
設計安全的驗證碼(安全的流程+復雜而又可用的圖形)
- 對認證錯誤的提交進行計數并給出限制,比如連續5次密碼錯誤,鎖定2小時
- 必要的情況下,使用雙因素認證