正常的密碼重置一般分為以下幾步:
1.輸入使用者名稱(客戶端提交)
2.驗證身份(伺服器檢測)
3.重置密碼(客戶端提交)
通常情況下,伺服器是很難控制的,於是我們只好在瀏覽器端做文章。
下面分析幾種重置密碼的設計缺陷
一、重置密碼的url與使用者沒有對應
比如生成的重置密碼url為:
然後由於這裡的引數code在伺服器端驗證的時候,只要其自身的演算法滿足伺服器端的驗證就直接通過了,不會去驗證這個code是不是和test賬戶對應的,從而,我們可以直接利用url: 重置帳號admin的密碼。這種設計顯然是比較二的邏輯,但的確有真實案例
二、已通過驗證,但是可以通過抓取重置密碼的post包,更改郵箱或者使用者名稱
這種情況通常是在使用者提交新密碼後,通過乙個字段(郵箱號,手機號或使用者名稱)與資料庫對應的字段關聯,從而去修改資料庫中的密碼,但是,永遠不要相信使用者的輸入!
示例:三、加密演算法過於簡單而被破解,導致密碼重置。這種一般都是一些簡單的加密演算法,將一些關鍵引數比如使用者名稱、郵箱、手機號、驗證字元、時間戳等,進行一定的規則的組合然後進行md5、base64加密。
1.郵箱+sid組合md5
2. 手機號|使用者名稱|郵箱|unix時間戳|找回密碼連線的md5 (base64編碼)
3.多次重置,尋找規律
4. 手機號+驗證碼 md5
四、給郵箱或者手機傳送乙個新密碼
這種情況下只要抓包,然後更改手機號或郵箱,就可以獲取到密碼
五、爆破型別(burpsuite)。
這種設計一般是在找回密碼的時候,會給指定的手機號傳送乙個用於驗證身份的驗證碼,然後只要使用者輸入正確的驗證碼,就可以進行密碼重置了。一般是由於驗證設計過於簡單,而且對校驗碼的校驗使用次數沒有進行限制,導致正確的驗證碼可以被列舉爆破,從而重置密碼。
傳送至郵箱的連線也存在爆破的可能
六、其他一些神奇的驗證方式
1.重置url的字段值和輸入新密碼標籤的id相同
2.加密驗證字串和之前返回資料中的字串相同
七、xss和csrf攻擊重置密碼
重置mysql 密碼 mysql重置密碼
ubuntu下重置mysql的root密碼 sudo vi etc mysql my.cnf,在 mysqld 段中加入一行 skip grant tables sudo service mysql restart,重啟mysql服務 sudo mysql u root p mysql,用空密碼進入...
mysql id重置密碼 mysql 重置密碼
mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...
mysql 重置密碼 mysql 重置密碼
mysql 重置密碼 版本5.7之前 1 修改mysql配置檔案 vi etc my.cnf 注 windows下修改的是my.ini 在 mysqld 後面任意一行新增 skip grant tables 用來跳過密碼驗證的過程。重啟mysql 2 進入mysql root localhost m...