dedecms v5.7 sp2前台任意用户登录(包括管理员)

dedecms v5.7 sp2前台任意用户登录(包括管理员)

前言

我们继续来说一下dedecms最新的几个漏洞,今天是一个前台任意用户登录的漏洞,该漏洞结合上一次提到的前台任意密码修改漏洞可以直接修改管理员的密码,剩下的就是找后台了,废话不多说,我们开始吧

漏洞版本

还是2018-1-09发行的最新版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pV1Nni9O-1594221020084)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/faI6B8lL2I.png?imageslim)]

漏洞影响

前台用户可以登录其他任意用户,包括管理员

漏洞利用条件
  1. 攻击者必须注册一个账户
  2. 开启了会员模块功能
漏洞复现
  1. 我们先注册一个用户,用户名为000001,密码为123(同样的,dedecms新建账户是需要审核的,我在本地搭建的,所以直接在数据库里做了一下修改)

  2. 登录我们的账户
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z4sM5S86-1594221020086)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/Acl1GB6GIF.png?imageslim)]

  3. /member/index.php?uid=000001,获取cookie中的last_vid__ckMd5
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F8EYUrCA-1594221020091)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/j5bDhDkfaI.png?imageslim)]

  4. /member/index.php ,用burp替换DedeUserIDDedeUserID__ckMd5的值 ,分别为我们的用户名000001和last_vid__ckMd5
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C862adke-1594221020094)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/jFAcefK1GJ.png?imageslim)]

  5. 成功登陆管理员账号
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q1jPs3PM-1594221020095)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/0251bH83Hl.png?imageslim)]

    代码分析

    用户登录后会跳转到/member/index.php这个页面,所以我们第一步就是要分析访问/member/index.php的条件,我们直接看源码,从第24行起

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8TPNwMud-1594221020097)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/Kj92haeHFC.png?imageslim)]

    我标出来的那一句就是关键,只要IsLogin()函数返回true,那么我们就还可以确认某个用户登录了,然后就是根据M_ID的值来获取该页面的各种信息,例如用户名、短消息等,如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oenefjlR-1594221020100)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/1c8Bk0hfj4.png?imageslim)]

    所以,我们可以初步确定,M_ID决定了我们登录的用户,IsLogin函数的返回值决定了是否能够登录成功。沿着这个思路,我们追踪一下IsLogin函数(include\memberlogin.class.php中)

    /**
         *  验证用户是否已经登录
         *
         * @return    bool
         */
        function IsLogin()
        {
            if($this->M_ID > 0) return TRUE;
            else return FALSE;
        }
    

    可见这个函数还是对M_ID进行了判断,我们继续追踪M_ID,在同一个文件的170行处:

    $this->M_ID = $this->GetNum(GetCookie("DedeUserID"));
    

    分别看一下这两个函数:

    GetCookie(include\helpers\cookie.helper.php):

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DrQeTeWc-1594221020101)(http://pbr6eymqa.bkt.clouddn.com/blog/180712/lkdE7hk77c.png?imageslim)]

    这个函数作用大概就是更具输入的key值,获取cookie中相应的值(我标记出来的地方是重点)

    GetNum(include\memberlogin.class.php):

    /**
         *  获取整数值
         *
         * @access    public
         * @param     string  $fnum  处理的数值
         * @return    string
         */
        function GetNum($fnum){
            $fnum = preg_replace("/[^0-9\.]/", '', $fnum);
            return $fnum;
        }
    

    该函数的作用就是获取整数值,没什么特别的地方。我们把目光聚焦在getcookie函数我标出来的部分,那个判断本意是想要防止别人直接通过更改DedeUserID登录别人的账号(希望没人说错),加了刚刚那个判断语句,我们不仅仅需要DedeUserID的值,还要知道这个用户对应的DedeUserID__ckMd 值。

    那可不可以我们自己注册一个用户,使它绕过if判断,并且它的M_ID的值与其他用户M_ID值相等,这样我们就可以登录到别人的账户上了。但是自己注册的账户的M_ID是来自cookie中的DedeUserID,而DedeUserID又是后台按序生成的,比如管理员的M_ID为1,第二个注册的人的M_ID为2。这么一来好像我们就不可能使两个账户的M_ID相等了。

    但是include\memberlogin.class.php的178行有这么一段代码:

    $this->M_ID = intval($this->M_ID);
    

    这里对M_ID施加了intval,而intval在进行转换时会把000001转换为1,或者把1+字母的形式转换为1

    var_dump(intval(000001));
    var_dump(intval('1wwww'));
    //D:\wamp64\www\some_practice\test3.php:2:int 1
    //D:\wamp64\www\some_practice\test3.php:3:int 1
    

    现在我们解决了伪造M_ID的问题,那么怎么使上面那个if语句成立呢?我们还是以000001这个账户为例,我们可以把DedeUserID更改为000001,然后就是需要再找一个substr(md5($cfg_cookie_encode.‘000001’),0,16))的值,然后把这个值替换到DedeUserID__ckMd,就可以成功绕过登录。那哪里可以找到刚刚那个东西呢?

    index.php中有一个功能就是会记录最后一个访客的数据,并存在cookie中的last_vid_ckMd5中[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9OdXjsi-1594221020103)(http://pbr6eymqa.bkt.clouddn.com/blog/180713/7bhEKK2ime.png?imageslim)]

    我们来看一下这个值是怎么计算的,可能会是个惊喜!

    我们从index.php的141行开始,有这么一段代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e89yAGUU-1594221020105)(http://pbr6eymqa.bkt.clouddn.com/blog/180713/1hfg9I0Iai.png?imageslim)]

    上面的代码中的last_id就是最后一个访问你的用户的id,来源如下:

     $last_vid = GetCookie('last_vid');
    

    上面的代码逻辑就是,如果你的空间还没有访客,那么last_vid就等于你url中传过去的uid,否则就直接取cookie中的那个last_vid。然后这个last_vid会被写入cookie,我们接着看PutCookie的处理方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LLHkOUIE-1594221020108)(http://pbr6eymqa.bkt.clouddn.com/blog/180713/aefB0dbF8L.png?imageslim)]

    可以看到last_vid_ckMd5的值其实就是我们前面需要的substr(md5($cfg_cookie_encode.‘000001’),0,16)),所以我们只需要把这里的last_vid_ckMd5替换掉DedeUserID__ckMd,并把DedeUserID修改为000001就可以从前台登录到管理员账户,当然想登录其他账户也是同样的道理,就是注册用户的时候更改一下用户名。

    总结

    总的来说这个漏洞的可利用性比上一次好很多,上一次的任意用户密码修改漏洞的利用条件较为苛刻,而且这两个漏洞结合起来就可以达到修改管理员用户密码的目的,我也将在下一篇文章里复现
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I8NIwU4Y-1594221020110)(http://pbr6eymqa.bkt.clouddn.com/blog/180713/JFK6e3f0cc.jpg?imageslim)]

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值