Dedecms V5.7漏洞总结复盘
学长自建的靶场,研究了一下,还挺有意思,故总结相关知识后写下笔记
快速跳转/目录:
GetShell步骤实录
成功GetShell

查看右边侧栏文件管理器 发现可以直接上传文件
直接上传一句话木马 通过蚁剑连接即可拿到shell

拓展:不仅仅是文件管理器可以直接上传木马,还有许多方式可以上传
任意修改前台用户密码
详细原理可以参考 这篇文章 涉及到PHP相关原理 讲的很详细
原理简要分析
在dedecms的此版本中,恢复密码拥有两种方式:
邮件方式:首先会检测邮件服务是否开启如果开启则发送邮件,否则给出提示信息
安全问题:检测是否有设置安全问题,如果有则重定向到密码重置的第三步,否则给出提示分析通过安全方式找回密码的逻辑代码:
if ($row['safequestion'] == $safequestion && $row['safeanswer'] == $safeanswer)此处的比较是"==" 为弱类型比较
漏洞触发点在于安全问题找回密码时的不安全性逻辑设计所导致的,所以我们根据流程进入到以"安全问题"找回密码的逻辑代码中继续分析,可以看到这里会根据之前传递进来的用户id作为参数从数据库查询对应的safequestion、safeanswer,之后于用户提供的safequestion以及safeanswer进行判断。
如果用户没有设置安全问题,数据库里存储的safequestion默认为"0",safeanswer默认为'null',在此处我们可以利用弱类型转换构造成立,例如:
'0.0'=0SN函数:
function sn($mid,$userid,$mailto, $send = 'Y')
{
global $db;
$tptim= (60*10);
$dtime = time();
$sql = "SELECT * FROM #@__pwd_tmp WHERE mid = '$mid'";
$row = $db->GetOne($sql);
if(!is_array($row))
{
//发送新邮件;
newmail($mid,$userid,$mailto,'INSERT',$send);
}
//10分钟后可以再次发送新验证码;
elseif($dtime - $tptim > $row['mailtime'])
{
newmail($mid,$userid,$mailto,'UPDATE',$send);
}
//重新发送新的验证码确认邮件;
else
{
return ShowMsg('对不起,请10分钟后再重新申请', 'login.php');
}
}在该函数中会首先进行初始化赋值操作(此处的send为上面传递进来的'N'),之后跟进传递的id进行一次sql查询,之后进行判断,在这里我们直接根据newmail查看发送邮件的函数具体实现:
elseif($send == 'N') { return ShowMsg('稍后跳转到修改页', $cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid."&key=".$randval); }
可以看到当send为'N'时,直接在前端页面返回了验证码,又因为用户id是我们可以控制的safequestion下可以绕过,那么也就达成了修改前台任意用户密码的攻击。
文件上传拿Shell的补充方式
随便看看
以下内容仅为演示 请不要模仿 请熟记 《中华人民共和国网络安全法》
谨记,未经授权恶意渗透他人服务器为违法行为!
查看webshell:




2核2G 40G硬盘 华为云服务器 Windows Server 2019系统










具体是什么flag 请自行猜测 只可意会 不可言传
本次测试创建账户均已删除,请勿模仿!
再次提醒,请遵守相关法律法规。
Last updated
Was this helpful?




















