來源:
任意用戶密碼重置的10種常見姿勢(shì)
整理課件資料
1 驗(yàn)證碼不失效
- 造成原因:找回密碼的時(shí)候獲取的驗(yàn)
證碼缺少時(shí)間限制僅值判斷了驗(yàn)證碼是
夠正確未判斷驗(yàn)證碼是否過期 - 測(cè)試方法:通過枚舉找到真正的驗(yàn)證
碼輸入驗(yàn)證碼完成驗(yàn)證
-案例
輸入目標(biāo)手機(jī)號(hào)式镐,獲取驗(yàn)證碼隨意輸入驗(yàn)證碼1234點(diǎn)擊下一步,攔截?cái)?shù)據(jù)包
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
得到正確的驗(yàn)證碼是1059然后到網(wǎng)站上輸入驗(yàn)證碼跳轉(zhuǎn)到輸入新密碼的頁面完成重置密碼
2驗(yàn)證碼直接返回
- 1.輸入目標(biāo)手機(jī)號(hào)利职,
點(diǎn)擊獲取驗(yàn)證碼 -
2.驗(yàn)證碼直接返回
1269烛缔,輸入驗(yàn)證
碼跳轉(zhuǎn)到重置頁面
3.驗(yàn)證碼未綁定用戶
- 造成原因:輸入手機(jī)號(hào)和驗(yàn)證碼進(jìn)行重置密碼的時(shí)候侠讯,僅對(duì)驗(yàn)證碼是夠正確進(jìn)行了判斷,未對(duì)該驗(yàn)證碼是否與手機(jī)號(hào)匹配做驗(yàn)證。
- 測(cè)試方法:在提交手機(jī)號(hào)和驗(yàn)證碼的時(shí)候踏拜,替換手機(jī)號(hào)為他人手機(jī)號(hào)進(jìn)行測(cè)試岩饼,成功通過驗(yàn)證并重置他人密碼荚虚。
首先使用自己的手機(jī)號(hào)接收驗(yàn)證碼然后輸入自己手機(jī)號(hào)接收到的驗(yàn)證碼,點(diǎn)擊下一步并攔截?cái)?shù)據(jù)包最后替換數(shù)據(jù)包里的目標(biāo)手機(jī)號(hào)籍茧,然后發(fā)包
這個(gè)案例也是驗(yàn)證碼未綁定用戶延伸一下版述,有時(shí)候測(cè)試會(huì)碰到這種,我們發(fā)現(xiàn)用戶名被加密了硕糊,我們又無法得知加密算法院水,怎么辦?大部分這種都不需要知道加密算法简十,比如這個(gè)例子檬某,得到的liuyy的加密后的值是80e688602c4b11e66320c421e3b71ef2,那么我們就可以直接用這個(gè)keycode了
步驟是一樣的螟蝙,輸入我們的用戶名和收到的驗(yàn)證碼恢恼,然后把我們的keycode替換為liuyy的那個(gè)keycode,這樣就可以重置liuyy的密碼了胰默。(漏洞原因還是是判斷了驗(yàn)證碼是否正確场斑,而沒有判斷該驗(yàn)證碼是否跟該用戶匹配。)
4.修改接收的手機(jī)或郵箱
- 造成原因:用戶名牵署、手機(jī)號(hào)漏隐、驗(yàn)證碼三者沒有統(tǒng)一進(jìn)行驗(yàn)證,僅判斷了三者中的手機(jī)號(hào)和驗(yàn)證是否匹配和正確奴迅,如果正確則判斷成功并進(jìn)入下一流程青责。
- 測(cè)試方法:輸入用戶名獲取驗(yàn)證碼,修改接收驗(yàn)證碼的手機(jī)號(hào)為自己的號(hào)碼,自己手機(jī)成功接收驗(yàn)證碼脖隶,提交到網(wǎng)站進(jìn)行驗(yàn)證扁耐,驗(yàn)證成功并進(jìn)入下一流程。
點(diǎn)擊找回密碼产阱,首先我們輸入zhangwei婉称,然后點(diǎn)擊獲取驗(yàn)證碼,這個(gè)時(shí)候把手機(jī)號(hào)改為我們自己的號(hào)碼构蹬,輸入我們自己的號(hào)碼和驗(yàn)證碼王暗,成功跳到重置密碼的頁面,密碼重置成功
5本地驗(yàn)證的繞過
- 造成原因:客戶端在本地進(jìn)行驗(yàn)證碼是否正確的判斷怎燥,而該判斷結(jié)果也可以在本地修改瘫筐,最終導(dǎo)致欺騙客戶端,誤以為我們已經(jīng)輸入了正確的驗(yàn)證碼铐姚。
- 測(cè)試方法:重置目標(biāo)用戶策肝,輸入錯(cuò)誤驗(yàn)證碼,修改返回包隐绵,把錯(cuò)誤改為正確之众,即可繞過驗(yàn)證步驟,最終重置用戶密碼依许。
輸入手機(jī)號(hào)13888888888棺禾,輸入驗(yàn)證碼123456,驗(yàn)證碼錯(cuò)誤的時(shí)候峭跳,返回包返回的是0
這里我們所做的就是把0修改為1膘婶,可以借工具修改返回包,我們把0改為1蛀醉,然后查看頁面悬襟,成功跳轉(zhuǎn)到修改密碼的頁面,輸入新密碼即可修改用戶13888888888的密碼
6跳過驗(yàn)證步驟
- 造成原因:對(duì)修改密碼的步驟拯刁,沒有做校驗(yàn)脊岳,導(dǎo)致可以直接輸入最終修改密碼的網(wǎng)址,直接跳轉(zhuǎn)到該頁面垛玻,然后輸入新密碼達(dá)到重置密碼的目的割捅。
- 測(cè)試方法:首先使用自己的賬號(hào)走一次流程,獲取每個(gè)步驟的頁面鏈接帚桩,然后記錄頁面3對(duì)應(yīng)的輸入新密碼的鏈接亿驾,重置他人用戶時(shí),獲取驗(yàn)證碼后账嚎,直接輸入頁面3鏈接到新密碼的界面颊乘,輸入密碼重置成功参淹。
使用賬戶wangshuai醉锄,點(diǎn)擊獲取驗(yàn)證碼乏悄,然后補(bǔ)齊下面的鏈接https://xxx/page/login/veifyAccess.html?username=wangshuai&email=wangshuai@xxx.com.cn,訪問后即可直接重置該用戶的密碼
7未校驗(yàn)用戶字段的值
- 造成原因:在整個(gè)重置密碼的流程中恳不,只對(duì)驗(yàn)證碼和手機(jī)號(hào)做了校驗(yàn)檩小,未對(duì)后面設(shè)置新密碼的用戶身份做判斷,導(dǎo)致在最后一步通過修改用戶身份來重置他人的密碼烟勋。
- 測(cè)試方法:使用自己的手機(jī)號(hào)走流程规求,在走到最后一個(gè)設(shè)置密碼的流程時(shí),修改數(shù)據(jù)包里的用戶信息卵惦。
8修改密碼處id可替換
- 造成原因:修改密碼的時(shí)候阻肿,沒有對(duì)原密碼進(jìn)行判斷,且根據(jù)id的值來修改用戶的密碼沮尿,類似的SQL語句:update user set password="qwer1234" where id = ‘1’修改數(shù)據(jù)包里的id的值丛塌,即可修改他人密碼。
- 測(cè)試方法:修改自己用戶密碼畜疾,抓取數(shù)據(jù)包赴邻,替換數(shù)據(jù)包中用戶對(duì)應(yīng)的id值,即可修改他人的密碼啡捶。
點(diǎn)擊立即提交姥敛,得到右邊的數(shù)據(jù)包,測(cè)試發(fā)現(xiàn)修改id為5瞎暑,就可以把對(duì)應(yīng)的用戶密碼修改為123456彤敛,沒有對(duì)用戶的原始密碼判斷,也沒有判斷id是否屬于該用戶了赌。8.修改密碼處id可替換
成功修改id為5的用戶密碼為123456墨榄,而且可以通過遍歷id修改所有用戶的密碼
9.cookie值的替換
- 造成原因:重置密碼走到最后一步的時(shí)候僅判斷唯一的用戶標(biāo)識(shí)cookie是否存在,并沒有判斷該cookie有沒有通過之前重置密碼過程的驗(yàn)證揍拆,導(dǎo)致可替換cookie重置他人用戶密碼渠概。(cookie可指定用戶獲取)
- 測(cè)試方法:重置自己用戶密碼到達(dá)最后階段嫂拴,抓到數(shù)據(jù)包播揪,并在第一階段重新獲取目標(biāo)用戶cookie,替換cookie到我們抓取的數(shù)據(jù)包中筒狠,發(fā)包測(cè)試猪狈。
到第一步去獲取驗(yàn)證碼的時(shí)候,點(diǎn)擊下一頁辩恼,可以獲取到該用戶wangshuai對(duì)應(yīng)的內(nèi)容Cookie: JSESSIONID=E1AC27A7302C03C9432DE2254B99311A
10.修改信息時(shí)替換字段值
- 造成原因:在執(zhí)行修改信息的sql語句的時(shí)候雇庙,用戶的密碼也當(dāng)作字段執(zhí)行了谓形,而且是根據(jù)隱藏參數(shù)loginid來執(zhí)行的,這樣就導(dǎo)致修改隱藏參數(shù)loginid的值疆前,就可以修改他人的用戶密碼寒跳。
- 測(cè)試方法:修改個(gè)人資料的時(shí)候,抓取數(shù)據(jù)包竹椒,然后來修改數(shù)據(jù)包的參數(shù)和對(duì)應(yīng)的值童太,參數(shù)名一般可以在其他地方找到,替換隱藏參數(shù)即可修改他人的密碼等信息胸完。
view-source:https://www.xxx.com/ua/employee/forUpdate.do查看下這個(gè)頁面的源代碼书释,找到了一個(gè)參數(shù)loginId,這個(gè)參數(shù)是對(duì)應(yīng)用戶身份的而我們發(fā)現(xiàn) 上面的數(shù)據(jù)包里沒有這個(gè)參數(shù)赊窥,那么我們是否可以自己添加上去呢爆惧?
添加字段loginId,并且把值修改為他人的用戶锨能,發(fā)包返回修改成功這樣我們就成功的把用戶871XXXXXX的密碼改為了跟我們密碼相同的值