署理加盟 2019全新署理方案 挣钱+省钱左右开弓,独立渠道,丰盛赢利!

您现在的方位: unibet网 > 织梦大学 > 织梦安全 >

Dedecms_V5.7 getshell 使用后台文件上传功用缝隙

来历:不知道 发布时刻:2019-04-02热度:我要谈论
尽管是复现文章,不过会更具体地来阐释这个缝隙,,因为现在后台getshell把戏层出不穷,因而想要复现一波来学习一波getshell姿态~ 因为是最新的dedecms版别,因而咱们直接在织梦官网上下载即可~ http://www.dedecms.com/products/dedecms/downloads/ DedeCMS V5.7 SP2...

unibet注册unibet淘宝店开业,好礼送不断

尽管是复现文章,不过会更具体地来阐释这个缝隙,,因为现在后台getshell把戏层出不穷,因而想要复现一波来学习一波getshell姿态~

 

因为是最新的dedecms版别,因而咱们直接在织梦官网上下载即可~

 

http://www.dedecms.com/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 xiuzhanwang_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 `xiuzhanwang_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", "\\r",$adbody);

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

    $adbody = "<!--\r\ndocument.write(\"{$adbody}\");\r\n-->\r\n";

    $fp = fopen($cacheFile, 'w');

    fwrite($fp, $adbody);

    fclose($fp);

}

include $cacheFile;

 

这儿首要是三个判别条件,nocache不为空,cachefile不为空,这些判别条件咱们都能够经过GET或许POST来提交,然后进行假造~

 

进入判别条件后往下走,首要是从数据库中select aid,那么这时分咱们到数据库中去看看:

 

 

这儿其时在填写广告信息的时分,设置的timeset为0,因而也就直接令$adbody = $row[‘normbody’];

而这儿的normbody也便是咱们的evil code,下面咱们就应该要点看这个adbody参数

首要进行三个replace,这儿的replace如同对咱们的参数没有影响,因而直接越过~

接着将adbody参数刺进到document.write()代码中,这儿假如做过ctf的人都应该有一种感觉,那便是参数闭合的话,将会形成恣意代码履行,这儿也便是缝隙的成因地点!

最终翻开cachefile,将adbody写入到文件中~

这儿因为这个文件是html静态文件,,因而没有可使用点,,仍是找下文件吧,,

WWW\uploads\data\cache\myad-3.html

假如是动态文件,,因而咱们也能够使用前后闭合来完成恣意代码,,扯远了。。

总结来说其实便是$adbody = “<!–\r\ndocument.write(\”{$adbody}\”);\r\n–>\r\n”; 这段代码出的问题

下面咱们来结构参数进行poc验证~

首要是拜访给的广告链接

Dedecms_V5.7 getshell 使用后台文件上传功用缝隙

 

这儿我还没输入参数,,下面输入参数逐渐进行循环~

其实也便是两个判别条件和一个代码的履行~

Dedecms_V5.7 getshell 使用后台文件上传功用缝隙

这儿url不用说,,便是给的广告链接,,其间GET了aid参数,,因而咱们只需加上nocache参数,来完成isset($nocache),至于!file_exists($cacheFile)这个方才文件都找到了,,必定存在的。。

最终便是便是代码履行,,这儿一开端有强迫症,我一定要闭合参数!(下面便是闭合问题的一个测验)

这儿一开端很不解,,这呈现的是啥?

<!-- document.write("-->"); -->

这是源码,,咱们刺进了–>这段,,可是双引号没闭合啊!也便是页面句子实践成了下面这样

<!-- document.write("--> "); -->

因而也就呈现了上面的状况,,这儿不太了解,,这样不闭合居然能够。。

 

可是我有强迫症。。

 

Dedecms_V5.7 getshell 使用后台文件上传功用缝隙

 

最终强行闭合。。尽管对成果没影响。。

 

上述如有不当之处,敬请指出~

 

本文地址:https://www.m88nob1.com/dedecms_aq/1617.html

    责任编辑:unibet网

    宣布谈论

    谈论列表(条)