Dedecms_V5.7 getshell 利用后台文件上传功能漏洞

虽然是复现文章,不过会更详细地来阐释这个漏洞,,因为现在后台getshell花样层出不穷,因此想要复现一波来学习一波getshell姿势~

 

因为是最新的dedecms版本,因此我们直接在织梦官网上下载即可~

 

http://www.zuola.net/products/dedecms/downloads/

 

DedeCMS V5.7 SP2正式版

 

发布日期: 2017-04-05

 

这里我测试的是utf-8版本,,感觉版本这个无所谓~

 

下载下来然后安装什么的就不说了,,直接进后台,找到漏洞功能以及对应的功能函数

 

Dedecms_V5.7 根据文件上传功能来getshell

漏洞在”模块”下的”广告管理”处,这里我们点击“添加一个新广告”

Dedecms_V5.7 根据文件上传功能来getshell

 

 

跟原文复现的有一点不一样,,不过不影响,,下面我们来抓包看看参数

 

Dedecms_V5.7 根据文件上传功能来getshell

 

 

我们的参数在normbody里,文件为dede/ad_add.php

 

 $query = "

     INSERT INTO zuola.net_myad(clsid,typeid,tagname,adname,timeset,starttime,endtime,normbody,expbody)

     VALUES('$clsid','$typeid','$tagname','$adname','$timeset','$starttime','$endtime','$normbody','$expbody');

    ";

    $dsql->ExecuteNoneQuery($query);

    ShowMsg("成功增加一个广告!","ad_main.php");

    exit();

在这里我们看到了我们的代码已经插入到了数据库,,一般的思路应该是找哪些php文件调用了这个广告代码,但是点击我们的广告代码就出现了地址。

Dedecms_V5.7 根据文件上传功能来getshell

$cacheFile = DEDEDATA.'/cache/myad-'.$aid.'.htm';

if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile) > $cfg_puccache_time )

{

    $row = $dsql->GetOne("SELECT * FROM `zuola.net_myad` WHERE aid='$aid' ");

    $adbody = '';

    if($row['timeset']==0)

    {

        $adbody = $row['normbody'];

    }

    else

    {

        $ntime = time();

        if($ntime > $row['endtime'] || $ntime < $row['starttime']) {

            $adbody = $row['expbody'];

        } else {

            $adbody = $row['normbody'];

        }

    }

    $adbody = str_replace('"', '\"',$adbody);

    $adbody = str_replace("\r",