dedecms任意密码重置漏洞

2019-03-26 00:00 评论共2034人参与  共25人阅读      文章作者:刘小艾

一、情况描述

DeDeCMS V5.7 SP2版本存在任意密码重置漏洞,漏洞编号为CVE-2019-10014,通过此漏洞可以导致网站用户任意密码被重置。


二、漏洞复现

本地搭建DeDecms环境,分别注册testone与testtwo账户。


dedecms任意密码重置漏洞

登录testone账户

dedecms任意密码重置漏洞

构造payload,id为要修改的目标账户的mid

/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=3

dedecms任意密码重置漏洞

成功获取key值为wRQxjr6S利用获取的key值可修改目标账户的密码

/member/resetpassword.php?dopost=getpasswd&id=3&key=wRQxjr6S

dedecms任意密码重置漏洞

三、漏洞分析

首先我们进入resetpassword.php文件,从75行开始,当$dopost=safequestion时,通过传入的参数id查询对应用户的安全问题与设置的答案信息,如果传入的问题和答案不为空,且正确时,则进入sn()函数。

dedecms任意密码重置漏洞

按照程序的逻辑,设置了问题与答案时,不知道正确的内容是无法进入到sn()函数,但是当用户没有设置问题与答案时,则有可能进入到sn()函数。从数据库发现,如果没有设置安全问题,则问题默认是“0”,答案默认为空。

dedecms任意密码重置漏洞

当我们传入的答案为空时,if条件语句$row[‘safeanswer’] == $safeanswer 成立;要让$row[‘safequestion’] == $safequestion成立,则当$safequestion传入的参数为“0.0”,“0.”,“0e1”时,可绕过empty()函数的判断,使之if条件语句成立。

进入sn()函数后,定位sn()函数位置,函数sn()在文件inc_pwd_functions.php中

dedecms任意密码重置漏洞

这里有一个条件语句,意思是当$row为空时,进入第一个条件发送邮件,第二个条件是超过10分钟,可以继续发送新验证码。继续跟进newmail()函数。

dedecms任意密码重置漏洞

直接看insert操作,$randval = random(8) 将8位随机字符串$key = md5($randval) 加密后存入到dede_pwd_tmp表中。由于前文$send参数直接传入的是N,则会将$randval参数内容直接返回到如下链接

/resetpassword.php?dopost=getpasswd&id=”.$mid.”&key=”.$randval

到这一步我们可以获取到重置密码的验证码key,再次回到 

resetpassword.php 文件,查看

dedecms任意密码重置漏洞

这一步看的的逻辑是,判断输入的id对应用户是否进行了密码重置操作,如果没有就退出。之前的过程已经进行了密码重置操作,进入下一步

dedecms任意密码重置漏洞

判断传入key的md5的值是否与pwd内容相等,相等则可直接修改dede_member表中对应的用户与密码。


四、修复建议

1.等待官方更新

2.湖南网信测评临时修复方案:找到resetpassword.php文件,将75行之后新增

if($safequeston == 0.0 || $safequeston== 0. || $safequeston ==0e1)

{

    ShowMsg(“对不起,请不要非法提交”,”login.php”);

    exit();

}


五、来源

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10014

https://blog.csdn.net/yalecaltech/article/details/88594388


本文章仅描述可能存在的安全问题,湖南网信测评不为此问题提供任何承诺或保证。由于传播或利用本文所提供的信息而造成任何直接或间接的后果和损失,均由使用者本人负责。

dedecms任意密码重置漏洞

版权声明:本文著作权归刘小艾所有,(微信/QQ号:1662225553)欢迎分享本文,谢谢支持!
转载请注明:dedecms任意密码重置漏洞 | 刘小艾SEO
分类:dede织梦主题 标签:

发表评论


表情