zzcms v8.2 任意用户密码重置

0x01 漏洞概述

本次zzcms8.2的漏洞是任意用户密码重置,需要事先注册一个账号用来做测试,同时在找回密码的地方也存在遍历用户的问题,那么就开始复现漏洞了。

0x02 漏洞复现

首先,我注册了一个test/test用户,然后点击登录的忘记密码,即http://127.0.0.1/one/getpassword.php

存在用户的话

不存在用户的话

通过这种方式,如果有一个强大的字典,即可遍历很多用户名了。

填写好了正确的用户名和验证码之后,进入第二步,按照正常流程,点击发送验证码,然后随便填写一个验证码,抓包后send repeat后进行go,然后看到相应包的结果,如图

我们可以看到在响应包中有一段js代码

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

将其中的no改为yes,即

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

然后重新来一次,在第二步的时候,点击下一步之前在浏览器的console控制器中将修改后的js复制过去并执行

再次抓包

会发现这个之前没有的包,然后发现浏览器界面已经跳转到了第三步重置密码的界面了。
finish.png

0x03 漏洞分析

本次zzcms的任意密码重置漏洞网上有很多复现,但是都没有产生原因的分析,因此我通过抓包分析了出现的PHP文件后发现漏洞出现在ajax/ajax/yzm_check_ajax.php中

yzm_check_ajax.php

截图部分是所有的php代码,这里id的值就是输入的验证码,founderr用来判断验证码是否正确,如果等于1的话就是说验证码是错误的,如果是正确的话就会echo三个标签,仔细看的话这这个是我们之前在响应包中看到的那个带有no的js代码,而如果是正确的验证码的话就是yes,因此,这里应该是通过前端的代码来最终判断验证码是否正确,但是开发者却忽视了前端代码是我们可以控制的,因此可以绕过这里的验证码。

本文标题:zzcms v8.2 任意用户密码重置

文章作者:Pino-HD

发布时间:2018年06月19日 - 19:06

最后更新:2018年06月19日 - 19:06

原始链接:https://pino-hd.github.io/2018/06/19/zzcms8-2任意用户密码重置/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!