Username enumeration

使用者名稱列舉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


    鎖定機制邏輯缺陷

    目標網站只要密碼錯誤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