DedeCMS-V5.7-UTF8-SP2 重置任意用户密码漏洞
DedeCMS-V5.7-UTF8-SP2 重置任意用户密码漏洞
: : DedeCMS-V5.7-UTF8-SP2存在任意用户密码重置漏洞,当用户未设置密保问题时,将会受该漏洞影响导致密码可被攻击者篡改。
漏洞复现:
密码找回:
进入密码找回页面

跳过验证:
在url框输入:
http:// dedecms网址/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=4

获取临时验证码
使用BP抓包,在回包中抓取临时验证码
PS:在回包中发现&被转义成实体字符,所以直接点击链接不会跳转到正确页面,正确链接应为:
http:// dedecms网址/member/resetpassword.php?dopost=getpasswd&id=4&key=G2cn9KxA

修改密码
成功进入修改密码界面后即可修改用户密码

修改成功
现在可以用新密码登录了!!!

漏洞原理:
在DedeCMS-V5.7-UTF8-SP2/uploads/member/resetpassword.php文件中的第75行可以看出,当参数$dopost==safequestion时可以直接进入验证密保问题的代码块中,从而绕过输入用户名、邮箱和验证码环节

在代码84行可以看出,if($row[‘safequestion’] == $safequestion && $row[‘safeanswer’] == $safeanswer)使用的是==判断,所以存在弱类型问题;在文件中默认$row[‘safequestion’]在数据中的内容为0,$row[‘safeanswer’]在数据库中的结果为空;
变量$safeanswer与$safequestion是用户可控制的变量,要绕过验证就得满足empty($safequestion)为false且$row['safequestion'] == $safequestion && $row['safeanswer'] == $safeanswer为true,所以可以赋值变量$safequestion为浮点型的0.0,进行绕过。
绕过后会进入sn的方法,并且传入参数$mid, $row['userid'], $row['email'], 'N';因此跟入sn方法,在DedeCMS-V5.7-UTF8-SP2/uploads/member/inc/inc_pwd_functions.php文件中第150-172行发现代码块,且该方法会调用newmail方法。

跟入newmail方法,在DedeCMS-V5.7-UTF8-SP2/uploads/member/inc/inc_pwd_functions.php文件中第73-123行中发现代码块,然后当传入的$send为N的时候便会下发重置密码的链接,进行密码修改操作。







