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) ||...
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/