dedeCMS前台用户密码重置漏洞的复现与分析

版本:5.7

 

分析写在了后面

 


 

 

详细过程

安装

dedeCMS前台用户密码重置漏洞的复现与分析_第1张图片

dedeCMS前台用户密码重置漏洞的复现与分析_第2张图片

dedeCMS前台用户密码重置漏洞的复现与分析_第3张图片

dedeCMS前台用户密码重置漏洞的复现与分析_第4张图片

 

由于dede在安装完成后没开启会员注册,所以安装完成后首先进入后台,开启网站会员注册。

 

dedeCMS前台用户密码重置漏洞的复现与分析_第5张图片

 

开启后,注册一个test账号,密码为123456。需要注意的是不要设置安全问题,才可以复现该漏洞。

dedeCMS前台用户密码重置漏洞的复现与分析_第6张图片

注册完成

dedeCMS前台用户密码重置漏洞的复现与分析_第7张图片

进入后台查看test用户的mid值



 

然后退出登录,在前台构造url

抓包截取最后直接修改密码的网址

 



我们修改为密码为admin888

dedeCMS前台用户密码重置漏洞的复现与分析_第8张图片

然后用密码admin888进行登录

dedeCMS前台用户密码重置漏洞的复现与分析_第9张图片

最终可以成功登录

 

dedeCMS前台用户密码重置漏洞的复现与分析_第10张图片

 


 

 

过程分析

问题出在/member/resetpassword.php文件中

 

当dopost变量的值为safequestion时会执行下面的代码

第三行是通过正则匹配将整数赋值给mid。

第四、五行查询当前mid在数据库中的safequestion、safeanswer、userid、email信息。

第六到九行,如果safequestion、safeanswer为不为空时,变量safequestion、safeanswer赋值为空。

第十行到十四行,如果数据库获取到的内容等于变量safequestion、safeanswer,则会发送给用户留下的邮箱一个重置密码url。

dedeCMS前台用户密码重置漏洞的复现与分析_第11张图片

 

接下来我们来看sn函数,sn函数有三个四个形参

第三行设置一个全局变量

第四行设置变量tptim为十分钟

第五行取当前时间

第六到十二行发送第一次邮件。若想再次发送邮件需要等十分钟,不然会返回到ShowMsg()

dedeCMS前台用户密码重置漏洞的复现与分析_第12张图片

 

然后我们再定位一下newmail函数

可以看到$randval = random(8);还会生成8位随机数,然后通过md5加密之后,修改数据库中用户的密码为临时密码。

dedeCMS前台用户密码重置漏洞的复现与分析_第13张图片

 

想要绕过的关键在于下面几行,由于php是弱类型的,因此这种逻辑还是存在漏洞的。

dedeCMS前台用户密码重置漏洞的复现与分析_第14张图片

 

简化测试,成功绕过,最终输出1

dedeCMS前台用户密码重置漏洞的复现与分析_第15张图片

于是就有了下面的这个url

你可能感兴趣的:(渗透测试)