【漏洞分析】DeDeCMS v5.7 SP2 正式版前台任意用户密码修改漏洞

【漏洞分析】DeDeCMS v5.7 SP2 正式版前台任意用户密码修改漏洞

一、 漏洞概述

1.简介

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的 PHP 开源网站管理系统,也是使用用户最多的 PHP 类 CMS 系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms 免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用该系统。

2018 年 1 月 10 日,锦行信息安全公众号公开了一个关于DeDeCMS前台任意用户密码修改漏洞的细节。

2018 年 1 月 10 日,Seebug 漏洞平台收录该漏洞,漏洞编号为SSV-97074,知道创宇 404 漏洞应急团队成功复现该漏洞。

2. 漏洞限制

只影响前台账户

只能修改未设置安全问题的账户

3. 影响版本

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

二、 漏洞分析

1. 产生原因

**类型转换问题:**类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。

2. 过程分析

该漏洞便是由于php的自动类型转换导致的,具体位置在member/resetpassword.php的第84行:

在这里插入图片描述
从这段判断的开始看起:

77行取* i d ∗ 中的数字部分作为 ∗ id*中的数字部分作为* id中的数字部分作为mid*;

78行构建取数据库*#@__member*表中mid列值为$mid对应的safequestion,safeanswer,userid和email列的指令;

79行将刚刚得到的 s q l 指令执行的结果赋值给 sql指令执行的结果赋值给 sql指令执行的结果赋值给row;

80、83行分别判断 s a f e q u e s t i o n 、 safequestion、 safequestionsafeanswer的值是否为空字符串,若是则将其赋值为’';

此处便是利用该漏洞的关键:

已知帐号默认的 r o w [ ′ s a f e q u e s t i o n ′ ] 是 ′ 0 ′ (字符串), row['safequestion']是'0'(字符串), row[safequestion]0(字符串),_GET[‘safequestion ’]传过来的值为字符串,并且在php中:

<?php
echo empty("0");  // true
echo empty("0.0"); // false
echo '0'=="0.0"  // true
?>

要满足传入的$safequestion参数能通过80、84行的判断,可以利用以下url:

http://127.0.0.1/dedecms/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=4

将传入的$safequestion值设为"0.0",便可以通过80、84行的判断;

至于$safeanswer本身就为空,所以不用理,id则是你想要修改的账号的mid。

84行将刚刚经过判断的 s a f e q u e s t i o n 、 safequestion、 safequestionsafeanswer和从数据库中取到的 r o w [ ′ s a f e q u e s t i o n ′ ] 、 row['safequestion']、 row[safequestion]row[‘safeanswer’]进行比较是否相等,若都满足则进入sn()函数,并且传入的$send参数为’N’:

在这里插入图片描述

可见sn()函数仅是用作限制10分钟内重复发送验证码,由于是第一次请求发送,所以在161行进入newmail()函数,并且传入的$type参数为’INSERT’:

在这里插入图片描述

根据$type的值从第86行进入if判断:

88行出现关键变量 k e y 和 key和 keyrandval, k e y 是保存在数据库中的临时密码, key是保存在数据库中的临时密码, key是保存在数据库中的临时密码,randval则是修改密码时需要的临时验证码,用于和内部的$key进行比较来实现身份验证;

从77行跟进random()函数得知$randval是一个8位的随机字符串:在这里插入图片描述

然后 r a n d v a l 经过 m d 5 ( ) 函数加密得到 randval经过md5()函数加密得到 randval经过md5()函数加密得到key;

之前传过来的$send参数值为’N’,故跳到96行;

在98行的ShowMsg()中包含““&key=”. r a n d v a l ”,所以可知 randval”,所以可知 randval,所以可知randval的值包含在将要跳转的url中(可使用bp抓包获得);

而根据要跳转的url:

$cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&amp;id=".$mid."&amp;key=".$randval

在这里插入图片描述

由于该url中直接将$key以GET的方式传入,故125-128行的判断可以通过,所以直接访问抓包获得的url便可以修改密码。

三、 漏洞影响

通过 ZoomEye 网络空间探测引擎进行探测,以下为网络空间上所有的使用了 DeDeCMS 的网站,总数超过100万条:

在这里插入图片描述

四、 相关链接

[1] DeDeCMS 官网

http://www.dedecms.com/

[2] 漏洞详情原文

https://mp.weixin.qq.com/s/2ULQj2risPKzskX32WRMeg

[3] Seebug 漏洞平台

https://www.seebug.org/vuldb/ssvid-97074

  • 33
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
dedecms5.7sp2安装的步骤如下: 1. 首先,你可以在自己的电脑上安装织梦dedecms进行网站后台的熟悉以及站点的建立、调试。 [1] 2. 下载织梦dedecms安装所需的工具,并按照教程一步步进行操作。 [1] 3. 安装完成后,在自定义模型中使用了union、sleep、benchmark、load_file、outfile等语句可能会出现安全警告。 [2] 4. 为了解决这个问题,你需要打开源码目录下的dedesql.class.php和dedesqli.class.php两个文件,用文本编辑器打开。 [3] 5. 在这两个文件中找到safeCheck这个参数,将其修改为FALSE,即$this->safeCheck=FALSE; [3] 通过以上步骤,你就可以成功安装dedecms5.7sp2了。希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [织梦dedecms怎么安装?如何本地环境搭建网站?](https://blog.csdn.net/qq_43557623/article/details/112151218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改漏洞复现](https://blog.csdn.net/m0_60466340/article/details/121586697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改 漏洞复现(包括环境搭建)](https://blog.csdn.net/weixin_52497013/article/details/121468861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值