inc/mod_main.php //漏洞文件: case 'category':
if (!$job) $job='default';
else $job=basename($job);
$ifannouncement="none"; acceptrequest('mode');
if ($mode==1 || $mode==2) {
//..........................
} elseif (!empty($mode) && (!is_numeric($mode) || $mode>2)) {
getHttp404($lnc[313]);
}
//......................
if (is_numeric($itemid)) $itemid=floor($itemid); //注意1
elseif (isset($categorynames[$itemid])) $itemid=floor($categorynames[$itemid]);//注意2
else {
getHttp404($lnc[186]); //注意3
}
if (is_array($categories[$itemid]['subcates'])) {
$categories[$itemid]['subcates'][]=$itemid;
$all_needed_cates=@implode(',', $categories[$itemid]['subcates']);
} else {
$all_needed_cates=$itemid;//
}
$counter_now=$blog->countbyquery("SELECT COUNT(blogid) FROM `{$db_prefix}blogs` {$limitation2}`category` in ({$all_needed_cates})");
//...........................
index.php //调用文件: acceptrequest('act,go,page,part');
if (!$page) $page=1;
elseif (!is_numeric($page) || $page<=0) {
getHttp404($lnc[313]);
}
//.................................
if ($go) @list($job, $itemid)=@explode('_', basename($go));
if (!$act) $act='main';
else $act=basename($act);
$itemid=safe_convert($itemid); //有过滤
//..................................
if (file_exists("inc/mod_{$act}.php")) include ("inc/mod_{$act}.php");
//...............................
$itemid来自/index.php 注意1中存在逻辑错误,注意2条件不足可以绕过,我们关键看注意3中的函数。
function getHttp404($errormsg) {
global $config;
@header ("HTTP/1.1 404 Not Found");
if ($config['customized404']) {
@header ("Location: {$config['customized404']}");//注意4 没用die()
}
else {
catcherror($errormsg);//这里最终会用到 exit;代码终止执行
}
}
可以看到只要“data/config.php”配置文件中设置了“$config['customized404']”值,就能绕过过滤走到sql语句中去形成注入。(如有分析错误请指出:))
Bo-blog v2.1.1
厂商补丁:
Bo-blog
------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.Bo-blog.com/
暂无评论