article_edit.php在处理用户自定义数据的时候/*------------------------------function _SaveArticle(){ }------------------------------*/else if($dopost=='save'){ include(DEDEMEMBER.'/inc/archives_check.php'); //分析处理附加表数据 $inadd_f = $inadd_v = '';if(!empty($dede_addonfields)) //注意这里 { $addonfields = explode(';',$dede_addonfields); $inadd_f = ''; $inadd_v = ''; if(is_array($addonfields)) { foreach($addonfields as $v) { if($v=='') { continue; } $vs = explode(',',$v); if(!isset(${$vs[0]})) { ${$vs[0]} = ''; } ${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],0); $inadd_f .= ','.$vs[0]; $inadd_v .= " ,'".${$vs[0]}."' "; } } }。。。。。。 $upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' "; if(!$dsql->ExecuteNoneQuery($upQuery)) { ShowMsg("更新附加表 `$addtable` 时出错,请联系管理员!","javascript:;"); exit(); }从上面可以看出 变量$dede_addonfields 没有进行严格控制(这是因为自定义模型所造成),没有限制用户所提交的信息,造成SQL注入漏洞。结合附加表数据自定义模板,造成暴任意文件源码漏洞。上传图片模板,可执行任意代码。
测试方法:首先要有发表文章的权限(不需要审核通过,只要有发表和预览权限) 再修改内容在FF的FireBUG 下找到隐藏的dede_addonfields,关设置为显示,并且增加一个表单变量,templet 并设置变量为: 提交。现在 查看文章看:再查看源码 扩展利用:可以以附件形式上传任意设计的模板文件,在服务器解释执行。解决方案:改变附加表数据处理方式,或验证hash
GetShell
发表文章时上传图片如1.jpg
阅读全文……