0x00 短信驗證碼回傳html
一、原理cookie
經過手機找回密碼,響應包中包含短信驗證碼session
二、案例app
某網站選擇用手機找回密碼:工具
點擊發送按鈕,攔截回包,能夠查看到短信驗證碼,以下圖所示:post
三、修復建議網站
響應包中去掉短信驗證碼ui
0x01 修改用戶名、用戶ID或手機號重置任意帳號密碼加密
一、原理url
經過手機找回密碼是通常須要短信驗證碼驗證(這裏能夠嘗試爆破或繞過),當咱們輸入正確的手機號和正確的短信驗證碼,而後進入重置密碼的最後一步,也就是輸入新的密碼,輸入密碼後提交到服務端的post數據包須要包含當前用戶的身份信息,而通常網站是經過用戶名或用戶ID來標識用戶身份的,若是這個用戶名或用戶ID沒有和當前手機號、短信驗證碼進行綁定,也就是說服務端只驗證用戶名、ID是否存在,而不去驗證用戶和當前手機號是否匹配,那麼咱們就能夠經過修改用戶名、ID去修改其餘用戶的密碼了。固然能夠修改的地方不限於找回密碼的數據包,好比修改資料的地方也可能存在這樣的漏洞。
二、案例
以某網站修改任意用戶資料致使修改任意帳號密碼爲例,截取的數據包爲:
POST /user/info_do HTTP/1.1 Host: www.XXX.com User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://www.XXX.com/user/info_view Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 211 Cookie: yunsuo_session_verify=9341a54b945886e9485ff54a17650468; PHPSESSID=sgbibaqe7f8f6okerps8jip916; sdrcUserlockcount=1; sdrcUseruserid=14943 Connection: keep-alive password=A123456&email=1%40qq.com&address=1&postcode=1&mobile=13888888888&sex=man&birthday=0000-00-00°ree=collegeLT&testsite=1&post=1&__hash__=b0b15b067dea00bd34fd39421b7ef684_efc2399e5c4b2071f261e75fe3362d4fa
經分析與嘗試,發現數據包中的sdrcUseruserid的值是用來標識當前用戶身份的,那麼咱們就想到這個id能否任意修改呢?答案是確定的,咱們修改id的值爲1494二、14941都是能夠成功的,截圖以下:
三、修復建議:
0x02 修改響應包重置任意帳號密碼
一、原理
經過手機找回密碼通常須要短信驗證碼驗證,服務端須要告訴客戶端,輸入的驗證碼是否正確,若是客戶端收到true的信息,那麼就會向帶着true的信息向服務端請求進入下一步,而服務端收到true的信息,就會容許客戶端進入下一步,反之,若是是false的信息,服務端就不會容許客戶端進入下一步。也就是說咱們進入下一步的關鍵是讓服務端收到客戶端的true信息,而藉助burpsuite,咱們能夠修改服務端返回到客戶端的信息,這樣一來,咱們就能夠輸入任意短信驗證碼,而後將服務端返回的false信息改成true就能夠繞太短信驗證碼的驗證了。
二、案例
下面是找回密碼的一個流程,輸入正確的用戶名,跳到第二步,這時須要輸入短信驗證碼,這裏咱們隨意輸入一個短信驗證碼:123456,而後抓取服務端返回的信息以下所示。
把回包中false改成true後,便可繞太短信驗證碼驗證,結果以下圖所示。
三、修復建議
0x03 跳過驗證步驟重置任意帳號密碼
一、原理
找回密碼流程通常須要四個步驟:一、驗證用戶名;二、驗證短信驗證碼;三、輸入新密碼;四、重置成功。這四個步驟應該牢牢相連,互相相關,只有經過了第一個步驟驗證才能夠進入下一個步驟,若是每一個步驟之間沒有進行關聯性驗證,就可能致使跳過關鍵驗證步驟,從而致使重置任意帳號密碼。
二、案例
某網站找回密碼有四個步驟,第一步輸入正確的用戶名,第二步輸入手機號和正確的驗證碼,截取服務端返回的數據包爲:
<html><head><title>object moved</title></head><body> <h2>object moved to <a href="/Personal/sys/getpasswordreset">here</a>.</h2> </body></html>
上述數據包是用來跳轉到輸入密碼的界面,咱們猜測可否輸入任意驗證碼,而後直接訪問輸入密碼界面,結果是能夠的,並且重置密碼成功了。經分析,此處成功的關鍵是頁面跳轉到輸入密碼界面,當咱們輸入新的密碼後,提交到服務端,服務端並無對當前用戶身份進行二次驗證,只是簡單的獲取到用戶名或ID以及新密碼,從而致使跳太短信驗證碼驗證重置任意帳號密碼。
三、修復建議
0x04 重置密碼連接中token值未驗證或不失效致使任意帳號密碼重置
一、原理
使用郵箱重置密碼時,服務端向郵箱發送一個重置密碼的連接,連接中包含當前用戶的身份信息(如用戶名或用戶ID)和一個隨機生成的token信息,若是未對token值進行驗證或是驗證後不失效,咱們就能夠經過修改用戶名或用戶ID來重置任意帳號密碼。
二、案例
某網站使用郵箱找回密碼時,服務端向郵箱發送的連接爲:
http://www.xxx.com/GetPwd.aspx?q=0x0531387a5a6c1227e4d6ba0ce16dc72e&r=3244166
經嘗試,此處未對隨機生成的q值進行驗證或是驗證了可是驗證以後未失效,致使能夠重複使用,最終只須要修改r爲其餘用戶ID,便可重置其餘用戶密碼。
三、修復建議
0x05 找回密碼的短信驗證碼可被爆破致使任意帳號密碼重置
一、原理
找回密碼時使用位數較少的短信驗證碼,或者驗證碼沒有設置有效時間限制,致使攻擊者藉助自動化工具在必定時間範圍內爆破得到短信驗證碼,從而致使重置任意帳號密碼。
二、案例
某網站找回密碼時使用短信驗證碼的一個數據包爲:
Code=5000&u=13888888888&Check=dc5b94101cb4f23a9ce6ae71197fc5de&a=5
此處能夠對Code進行爆破,以下圖所示:
三、修復建議
還有cookie替換之類的,由於沒遇到實例,這裏暫時不整理了,以後遇到了再補上。