【原文連接】https://www.lovesec.com/penetration-test/233.htmlhtml
證碼缺乏時間限制僅值判斷了驗證碼是
夠正確未判斷驗證碼是否過時算法
碼輸入驗證碼完成驗證
-案例
輸入目標手機號,獲取驗證碼隨意輸入驗證碼1234點擊下一步,攔截數據包sql
POST /Account/CheckYQCode HTTP/1.1 Host: www.xxxx.cn User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest http://www.xxxx.cn/userCenter/toForgetPsdPage.html?mobile= Content-Length: 11 Cookie: ASP.NET_SessionId=30jfruwn22h2xng3ahhzo2jx Connection: close YQCode=1234
獲得正確的驗證碼是1059而後到網站上輸入驗證碼跳轉到輸入新密碼的頁面完成重置密碼cookie
點擊獲取驗證碼app
1269,輸入驗證
碼跳轉到重置頁面less
首先使用本身的手機號接收驗證碼而後輸入本身手機號接收到的驗證碼,點擊下一步並攔截數據包最後替換數據包裏的目標手機號,而後發包工具
這個案例也是驗證碼未綁定用戶延伸一下,有時候測試會碰到這種,咱們發現用戶名被加密了,咱們又沒法得知加密算法,怎麼辦?大部分這種都不須要知道加密算法,好比這個例子,獲得的liuyy的加密後的值是80e688602c4b11e66320c421e3b71ef2,那麼咱們就能夠直接用這個keycode了測試
步驟是同樣的,輸入咱們的用戶名和收到的驗證碼,而後把咱們的keycode替換爲liuyy的那個keycode,這樣就能夠重置liuyy的密碼了。(漏洞緣由仍是是判斷了驗證碼是否正確,而沒有判斷該驗證碼是否跟該用戶匹配。)網站
點擊找回密碼,首先咱們輸入zhangwei,而後點擊獲取驗證碼,這個時候把手機號改成咱們本身的號碼,輸入咱們本身的號碼和驗證碼,成功跳到重置密碼的頁面,密碼重置成功加密
輸入手機號13888888888,輸入驗證碼123456,驗證碼錯誤的時候,返回包返回的是0
這裏咱們所作的就是把0修改成1,能夠借工具修改返回包,咱們把0改成1,而後查看頁面,成功跳轉到修改密碼的頁面,輸入新密碼便可修改用戶13888888888的密碼
使用帳戶wangshuai,點擊獲取驗證碼,而後補齊下面的連接https://xxx/page/login/veifyAccess.html?username=wangshuai&email=wangshuai@xxx.com.cn,訪問後便可直接重置該用戶的密碼
點擊當即提交,獲得右邊的數據包,測試發現修改id爲5,就能夠把對應的用戶密碼修改成123456,沒有對用戶的原始密碼判斷,也沒有判斷id是否屬於該用戶。8.修改密碼處id可替換
成功修改id爲5的用戶密碼爲123456,並且能夠經過遍歷id修改全部用戶的密碼
到第一步去獲取驗證碼的時候,點擊下一頁,能夠獲取到該用戶wangshuai對應的內容Cookie: JSESSIONID=E1AC27A7302C03C9432DE2254B99311A
view-source:https://www.xxx.com/ua/employee/forUpdate.do查看下這個頁面的源代碼,找到了一個參數loginId,這個參數是對應用戶身份的而咱們發現 上面的數據包裏沒有這個參數,那麼咱們是否能夠本身添加上去呢?
添加字段loginId,而且把值修改成他人的用戶,發包返回修改爲功這樣咱們就成功的把用戶871XXXXXX的密碼改成了跟咱們密碼相同的值