這幾天的筆記都懶得發博客都寫在本地了,隨緣搬上來
什么是暴力破解
就是在攻擊者不知道目標賬號密碼情況下的,對目標系統的常識性登陸
一般會采用一些工具+特定的字典 來實現高效的連續的嘗試性登陸
一個有效的字典,可以大大提高暴力破解的效率
à常用的賬號密碼(弱口令),比如常用用戶名/密碼top 500等
à社工庫
à使用指定的工具來生成字典
如果一個網站沒有對登陸接口實施防暴力破解的措施,或者實施了不合理的措施。則該稱該網站存在暴力破解漏洞。
1. 是否要求用戶設置了復雜的密碼
2. 是否每次認證都使用安全的驗證碼
3. 是否對嘗試登陸的行為進行判斷和限制
4. 是否在必要的情況下采用了雙因素認證
5. …等等
暴力破解漏洞測試流程
- 確認登陸接口的脆弱性,嘗試登陸---抓包---觀察驗證元素和返回的信息,判斷是否存在被暴力破解的可能,例如測試是否有連續登陸幾次就要過一段時間登陸的風控規則。或者查看報錯是返回”賬號或密碼錯誤”還是返回”密碼錯誤”來判斷自己的用戶名是否猜對了。
- 對字典的優化,根據實際情況對字典進行優化,可以先自己注冊一個賬號,看看網站對賬號密碼的需求,再篩選出合適的密碼做成字典,提高爆破的效率
- 工具的自動化操作,配置自動化工具,比如線程,超時時間,重試次數等,進行自動化的操作
針對pikachu靶場的基於表單的暴力破解
隨便傳一個值進行抓包
發到爆破模塊
選擇Cluster bomb的攻擊方式
選擇username和password兩個參數
配置好payload
就可以開始爆破,
還有一個地方值得注意
這里可以判斷你請求的頁面是否返回了這個list里面的內容
這樣我們可以把登陸時賬號或密碼的錯誤提示放到這里面
這樣在我們大量重發的時候就可以根據有沒有返回到這個錯誤來判斷賬號密碼是否爆破成功
例如
當我們密碼輸出錯誤的時候會彈出這樣的錯誤信息
我們就可以把這個錯誤信息放到Grep-Match里面
我們再次進行爆破試試看
這里就會多出一列來判斷是否返回了你設置的信息,這算一個小技巧吧
當然也可以用length來進行判斷
暴力破解的防范與繞過
驗證碼的認證流程:
- 打開登陸頁面,向后台發送一個請求,當后台收到請求以后,會調用一個生成驗證碼的函數去生成一個驗證碼,回到前端變成一個圖片返回給你,同時將函數生成的值存到session中。
- 用戶輸入賬號密碼驗證碼提交的時候,后台對提交的驗證碼與session中的進行比較
- 如果驗證成功就會提示你成功,如果驗證失敗就提示失敗,然后后台會將現在的驗證碼銷毀,驗證碼一定是要一次一用的。
- 后台一般也會對驗證碼設置一個超時時間,如果超過規定的比如一分鍾,沒有從前端獲取到驗證碼信息,那就需要重新獲取一次驗證碼。
繞過服務端的驗證碼驗證
首先先踩點
當全部都是錯的時候
會返回驗證碼輸入錯誤
當驗證碼輸入正確的時候,那就會返回用戶名或密碼錯誤
抓包
在我們的登陸頁面刷新一個新的驗證碼
把新的驗證碼替換到我們抓的包里
發現服務端返回的是用戶名或者密碼錯誤,這說明了,我們的驗證碼起作用了,那么就可以放到爆破模塊中進行爆破
這樣就爆破成功了
源碼內應該在后面一行保證驗證碼一次一用的原則
繞過客戶端的驗證碼驗證
驗證碼直接在前端的js進行生成
那我們可以先通過前端的驗證,再用bp后端發包,這樣就可以繞過前端的js驗證
抓到包以后放到重發器中,換了賬號密碼再發一次,
發現這里只在前端做了驗證並沒有再在后端再做一次驗證,這樣又可以爆破了,爆破的過程就不再演示了。。
token能防爆破嗎
答案是不能的
在前端我們看到了token
我們只要寫個腳本獲取到每次刷新了頁面的token,再進行重發,這樣token就形同虛設