使用者名稱列舉Username enumeration
是指攻擊者能夠觀察網站行為的變化,以確定給定的使用者名稱是否有效。在嘗試暴力破解登入頁面時,需特別注意以下方面的任何差異:
- Status codes(狀態碼): 在暴力攻擊期間,傳回的 HTTP 狀態碼對於絕大多數猜測來說可能都是相同的,因為大多數猜測都是錯誤的。如果猜測返回不同的狀態代碼,則強烈表示使用者名稱是正確的。
- Error messages(錯誤訊息): 有時傳回的錯誤訊息會有所不同,取決於使用者名稱和密碼是否不正確或僅密碼不正確。
- Response times(回應時間): 如果大多數請求都以相似的回應時間處理,則任何偏離此時間的情況都表示幕後發生了不同的事情。
用錯誤訊息列舉帳號
舉例如下
1.觀察某網站發現,如果登入時帳號不存在,會返回invalid,因此可以利用這個特性,列舉出存在的使用者
可在Intruder->Positions 設定 username=§invalid-username§ 做批量嘗試,過濾掉invalid後,就會發現有一個帳號是返回Incorrect password,這表示該帳號存在
2.接著可以對己存在的帳號identifiedUser做密碼爆力破解
可在Intruder->Positions設定 username=identifiedUser&password=§invalid-password§ 做批量嘗試,觀察發現,當返回302時表示密碼正確,成功登入己存在的帳戶
Lab: Username enumeration via different responses
利用微小差異列舉帳號
舉例如下
觀察某網站發現,如果登入時帳號失敗,會返回 Invalid username or password
但仔細觀察會發現以下現象
- 用戶不存在, 返回Invalid username or password.
- 用戶存在但輸入錯誤密碼,返回Invalid username or password
因此可以利用這個方式列舉己存在使用者
Lab: Username enumeration via subtly different responses
利用時間差列舉帳號
舉例如下
仔細觀察某網站發現, 登入帳號失敗時網站會有兩種變化
- 用戶不存在, 回應時間較快
- 用戶存在但輸入超長的錯誤密碼,回應時間較久
因此可以利用這個方式列舉己存在使用者
但目標網站在登入失敗次數太多時,安全機制會封鎖IP,不過安全機制是用X-Forwarded-For來判斷IP,所以只要每次請求時都更改X-Forwarded-For,就可以饒過安全機制
根據以上的觀察,可以將登入請求放入Intruder, Positions設定以下,攻擊類型為Pitchfork
POST /login HTTP/1.1
...omit...
X-Forwarded-For: §payload1§
username=§payload2§&password=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
payload set 1: payload type選擇Numbers, 並設定 from: 1, to:1000, step: 1
payload set 2: payload type選擇simple list, 並貼上要測試的使用者清單
接著按下Start the attack,就可以results table觀察Response received和Response completed欄位,分析那一個用戶的反應時間最久,而這個用戶就是己存在的用戶
Lab: Username enumeration via response timing
透過帳戶鎖定列舉用戶名
舉例如下
觀察某網站發現,密碼輸入三次有不同的反應
- 用戶不存在, 輸入三次以上錯誤沒事
- 用戶存在但輸入錯誤密碼,輸入三次以上錯誤,帳戶會被鎖定
因此可以利用這個方式列舉己存在使用者
Lab: Username enumeration via account lock