任意使用者密碼重置(六):應答中存在影響後續邏輯的狀態引數
前言
在邏輯漏洞中,任意使用者密碼重置最為常見,可能出現在新使用者註冊頁面,也可能是使用者登入後重置密碼的頁面,或者使用者忘記密碼時的密碼找回頁面,其中,密碼找回功能是重災區。我把日常滲透過程中遇到的案例作了漏洞成因分析,這次,關注因重置憑證可暴破導致的任意使用者密碼重置問題。
密碼找回流程一般包括獲取簡訊驗證碼、校驗簡訊驗證碼是否有效、設定新密碼等三個步驟。在第二步,校驗簡訊驗證碼是否有效的結果應儲存在服務端,某些網站未在服務端儲存而是錯誤地將結果狀態值下發客戶端,後續又依靠前端 js 判斷是否可以進入第三步,那麼,更改應答包中的狀態值,可重置其他使用者的密碼。
案例一
在密碼找回頁面 http://www.xx.cn/yy/action/forgot 用攻擊者手機號 13908081024 進入密碼找回全流程,獲取簡訊驗證碼 033128、輸入圖片驗證碼、輸入簡訊驗證碼並提交:
服務端校驗通過後,系統應答如下:
簡單分析發現,校驗通過時服務端並未向客戶端 set-cookie,猜測服務端並未記錄校驗狀態,是否進入設定新密碼頁面完全是由前端 js 基於應答狀態決定的,那麼,即便我沒有簡訊驗證碼,通過將服務端下發給客戶端的校驗狀態從“失敗”改為“成功”,也能成功重置找回賬號密碼。
具體而言,以資訊蒐集時找到的客服手機號 13980808888 為例。輸入手機號、獲取簡訊驗證碼、輸入圖片驗證碼、輸入錯誤的簡訊驗證碼 123123 後提交:
由於簡訊驗證碼錯誤,系統校驗肯定失敗,系統應答如下:
攔截該應答,用前面抓取校驗成功的應答包替換之:
放行至客戶端,順利進入新密碼設定頁面:
輸入新密碼 PenTest1024 後提交,頁面提示密碼修改成功:
嘗試用 13980808888/PenTest1024 登入,驗證成功
案例二
在密碼找回頁面 http://www.xx.cn/yy/forgot 用攻擊者手機號 13908081024 進入密碼找回全流程,獲取簡訊驗證碼 2118、輸入簡訊驗證碼並提交:
服務端校驗通過後,系統應答如下:
簡單分析發現,校驗通過時服務端並未向客戶端 set-cookie,將服務端下發給客戶端的校驗狀態 code 改為“0000”,可以重置其他使用者密碼。
具體而言,以土豪手機號 13888888888 為例。輸入手機號、獲取簡訊驗證碼、輸入錯誤的簡訊驗證碼 1234 後提交。由於簡訊驗證碼錯誤,服務端校驗失敗,應答如下:
攔截該應答,用前面抓取校驗成功的應答包替換之後,放行至客戶端,順利進入新密碼設定頁面:
輸入新密碼 PenTest1024 後提交,頁面提示密碼修改成功。嘗試用 13888888888/PenTest1024 登入,驗證成功:
加固措施
服務端校驗簡訊驗證碼後應通過 cookie 記錄狀態,不應在前端通過狀態引數判斷。另外,服務端應限制列舉等惡意請求。
相關文章
- 邏輯漏洞之密碼重置密碼
- 任意使用者密碼重置(一):重置憑證洩漏密碼
- 任意使用者密碼重置(三):使用者混淆密碼
- 任意使用者密碼重置(五):重置憑證可暴破密碼
- 任意使用者密碼重置(二):重置憑證接收端可篡改密碼
- HTTP 響應狀態碼HTTP
- PbootCMS忘記密碼後的重置密碼流程boot密碼
- 重置PbootCMS使用者密碼boot密碼
- 【效能】Oracle表並行對邏輯遷移後查詢效能的影響Oracle並行
- Oracle exp中compress引數的影響測試Oracle
- ASP中函式呼叫對引數的影響 (轉)函式
- 動態配置邏輯域(LDOMs)中CPU的個數
- 最全的HTTP響應狀態碼列表:除了404,HTTP狀態碼還有啥?HTTP
- Git 爆任意程式碼執行漏洞,所有使用者都受影響Git
- [譯]使用MVI打造響應式APP(六):恢復狀態APP
- MySQL修改使用者密碼及重置root密碼MySql密碼
- 關於設計業務應答狀態碼的一點思考
- python requests檢測響應狀態碼Python
- 密碼找回邏輯漏洞總結密碼
- 編碼規範:不要用引數控制程式碼邏輯
- C#開發單例項應用程式並響應後續程序啟動引數C#單例
- 後端的狀態碼後端
- mysql 8 如何重置 root 使用者密碼MySql密碼
- API 所有的響應狀態碼都是 200?API
- 使用 setResponseStatus 函式設定響應狀態碼函式
- JVM 引數調整對 sortx 的影響JVM
- Java教程:影響MySQL效能的配置引數JavaMySql
- latex 中的存在,任意, ξ 符號符號
- 成品直播原始碼,禁止狀態列受到下滑的影響自動下拉原始碼
- 密碼即將過期提示的影響密碼
- XMLHttpRequest readyState響應狀態XMLHTTP
- 各平臺影響oracle Process數的引數(轉)Oracle
- Linux中如何檢視日誌命令中的響應狀態?Linux
- 狀態機解決複雜邏輯及使用
- 重置Oracle密碼Oracle密碼
- 使用列舉實現狀態機來優雅你的狀態變更邏輯
- Linux使用者密碼後不能登陸(回到原登陸狀態)問題Linux密碼
- HTTP協議---HTTP請求中的常用請求欄位和HTTP的響應狀態碼及響應頭HTTP協議