吟郁*~

 

前台任意修改密码-织梦复现漏洞

  1. 实验目的

实现dedecms前台修改密码进入后台漏洞复现

  1. 实验内容、原理

通过分析代码部分,dedecms中使用了对弱类型的判断,所以可以直接绕过弱类型比较任意修改密码。

  1. 实验过程

首先安装好PHPstudy环境(https://www.xp.cn/download.html

织梦版本:DedeCMS-V5.7

 

  1. 将Apache和mysql打开

  2. 把解压后的dedecms源码里的upload放入到phpstudy的目录www文件夹中。

  3. 网址:127.0.0.1/DedeCMS/uploads/install/index.php进行安装织梦

    (数据库的前缀不用修改,一般填写数据库用户,密码,名称,其他地方不用修改)

安装完成,开始准备复现。

 

登入网站后台,注册账号。

 

开始复现

 

  1. 把注册账号改为会员级别,否则无法访问member.php,

     

 

2、设置好后,进入网址,修改密码

http://127.0.0.1/dedecms/member/resetpassword.php

post:

dopost=safequestion&safequestion=0.0&safeanswer=&id=1(注:id=1,因为这里只申请了一个账号)

抓包截取,

3、获取本地地址,得到关键的key

 

4、在访问得到链接,跳过检测,直接填入新密码就可以成功登入,完成复现。

 

代码漏洞分析

分析D:\phpstudy_pro\WWW\dedecms\member\中的resetpassword.php中的代码

如下,可以看到有两种取回密码,登入账号的情况。

第一种是,邮件方式

第二种是,安全问题取回密码

其中,看到安全问题取回密码代码部分,

If语句中

if($row['safequestion']==$safequestion&&$row['safeanswer']==$safeanswer)

    {

sn($mid, $row['userid'], $row['email'], 'N');

         exit();

}

判断安全问题时使用了PHP的弱等于符号,很容易绕过判断;而在这里我们的admin账号又不设置有安全问题,可以看到safequestionsafeanswer

的值为空或者0,

说明可以手动控制它的变量,所以直接构造:

dopost=safequestion&safequestion=0.0&safeanswer=&id=1,进入修改密码界面

进而登入后台。

 

代码修复

把弱比较化成强比较,使得安全问题不易可控,攻击者无法到达修改页面

 

if($row['safequestion'] == $safequestion && $row['safeanswer'] == $safeanswer)

{

sn($mid, $row['userid'], $row['email'], 'N');

exit();

}

 

改为:

 

if($row['safequestion'] === $safequestion && $row['safeanswer'] === $safeanswer)

{

sn($mid, $row['userid'], $row['email'], 'N');

exit();

}

 

  1. 实验小结

    php中 === 和 == 不同的,

    1、用===进行比较,会先判断两个字符串类型是否相同,再进行比较。

    2、用==进行比较时,会将字符串类型转化成相同的,然后再进行比较。

    如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

posted on 2021-12-02 23:09  xiaoyuyuan~  阅读(138)  评论(0编辑  收藏  举报

导航