來源:https://link.jianshu.com/?t=https://www.ichunqiu.com/course/59045
漏洞描述:
可通過篡改用戶名或ID、暴力破解驗證碼等方式修改/重置任意賬戶的密碼。
測試方法:
密碼修改的步驟一般是先校驗用戶原始密碼是否正確,再讓用戶輸入新密碼。修改密碼機制繞過方式大概有以下三種:
1. 如果輸入新密碼的接口可以直接訪問,那么在未知原始密碼的的情況下即可直接修改密碼,通常知道了他人的用戶名即可任意修改他人的密碼。
2. 如果系統未校驗修改密碼的用戶身份,那么在提交修改密碼請求時,攻擊者通過輸入密碼,將用戶名或者用戶ID修改為其他人的,即可成功修改他人的密碼。
3. 當修改密碼時系統需要電子郵件或者手機短信確認,而應用程序未校驗用戶輸入的郵箱和手機號,那么攻擊者通過填寫自己的郵箱或手機號接收修改密碼的鏈接和驗證碼,以此修改他人的密碼。
密碼重置機制繞過攻擊方式主要有以下兩種:
1. 通過正常手段獲取重置密碼的鏈接,猜解鏈接的組成結構和內容(如用戶名或者時間戳的MD5值)。在得知他人郵箱的情況下,構造重置他人密碼的鏈接。
2. 在得知他人手機號的情況下,通過窮舉手機驗證碼重置他人的密碼。
風險等級:
【高危】:其它用戶的密碼被修改/重置成功
修復方案:
1. 一次性填寫校驗信息(原始密碼、新密碼等)后再提交修改密碼請求。
2. 對客戶端提交的修改密碼請求,應對請求的用戶身份與當前登錄的用戶身份進行校驗,判斷是否有權修改用戶的密碼並對原始密碼是否正確也進行判斷。
3. 不應將用於接收驗證信息的手機、郵箱等信息全部明文傳到客戶端,應對手機、郵箱等信息進行屏蔽處理,或不將此類信息返回到客戶端。
4. 對原始密碼進行了驗證的情況下,限制輸入原始密碼的錯誤次數,防止攻擊者暴力破解原始密碼。
5. 重置密碼鏈接中的關鍵信息應隨機化,不可預測(例如token機制),且禁止將關鍵信息返回到客戶端。