【漏洞復(fù)現(xiàn)】zzcms8.2 任意用戶密碼重置

0x01 漏洞概述

本次zzcms8.2的漏洞是任意用戶密碼重置,需要事先注冊一個賬號用來做測試,同時在找回密碼的地方也存在遍歷用戶的問題,那么就開始復(fù)現(xiàn)漏洞了。

0x02 漏洞復(fù)現(xiàn)

首先,我注冊了一個test/test用戶,然后點擊登錄的忘記密碼,即http://127.0.0.1/one/getpassword.php

存在用戶的話
不存在用戶的話

通過這種方式,如果有一個強大的字典,即可遍歷很多用戶名了。

填寫好了正確的用戶名和驗證碼之后,進入第二步,按照正常流程,點擊發(fā)送驗證碼,然后隨便填寫一個驗證碼,抓包后send repeat后進行g(shù)o,然后看到相應(yīng)包的結(jié)果,如圖


我們可以看到在響應(yīng)包中有一段js代碼

window.document.userreg.yzm_mobile2.value='no'

將其中的no改為yes,即

window.document.userreg.yzm_mobile2.value='yes'

然后重新來一次,在第二步的時候,點擊下一步之前在瀏覽器的console控制器中將修改后的js復(fù)制過去并執(zhí)行


再次抓包


會發(fā)現(xiàn)這個之前沒有的包,然后發(fā)現(xiàn)瀏覽器界面已經(jīng)跳轉(zhuǎn)到了第三步重置密碼的界面了。


finish.png

0x03 漏洞分析

本次zzcms的任意密碼重置漏洞網(wǎng)上有很多復(fù)現(xiàn),但是都沒有產(chǎn)生原因的分析,因此我通過抓包分析了出現(xiàn)的PHP文件后發(fā)現(xiàn)漏洞出現(xiàn)在ajax/ajax/yzm_check_ajax.php中

yzm_check_ajax.php

截圖部分是所有的php代碼,這里id的值就是輸入的驗證碼,founderr用來判斷驗證碼是否正確,如果等于1的話就是說驗證碼是錯誤的,如果是正確的話就會echo三個標(biāo)簽,仔細看的話這這個是我們之前在響應(yīng)包中看到的那個帶有no的js代碼,而如果是正確的驗證碼的話就是yes,因此,這里應(yīng)該是通過前端的代碼來最終判斷驗證碼是否正確,但是開發(fā)者卻忽視了前端代碼是我們可以控制的,因此可以繞過這里的驗證碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容