Bo-Blog个人博客系统注射漏洞

程序介绍:
Bo-Blog是一款基于PHP的、以MySQL为数据库支持的免费blog程序。
漏洞分析:
 
//inc/mod_tag.php
 
 
if (!defined(‘VALIDREQUEST’)) die (‘Access Denied.’);   
  
if (!$job) $job=’default’;   
else $job=basename($job);   
$itemid=safe_convert($itemid);   
  
acceptrequest(‘tag,rewrite’);   
if ($tag!==”) $job=’show’;   
$tag=($config[‘smarturl’]==1 && $config[‘urlrewrite’]==1 && $rewrite==1) ? tagurldecode($tag) : $tag;   
//缺省情况$config[‘smarturl’]==1 && $config[‘urlrewrite’]==1 这个条件是不成立的,所以不会调用tagurldecode函数   
//要管理员使用urlrewite功能才可以   
  
if ($job==’default’) {   
……….   
}   
  
if ($job==’show’) {   
    acceptrequest(‘mode’);   
    if ($mode==1 || $mode==2) $mbcon[‘tag_list’]=$mode-1;   
  
    $m_b=new getblogs;   
    if ($tag===”) catcherror($lnc[192]);   
  
    //$tag 变量进入查询语句,但是需要一个单引号,我们恰好可以通过tagurldecode函数引入单引号   
    $allentries=$blog->getgroupbyquery(“SELECT * FROM `{$db_prefix}tags` WHERE `tagname`='{$tag}’ LIMIT 0,1”);   
    if (!is_array($allentries[0]) || $allentries[0][‘tagentry’]=='<end>’ || $allentries[0][‘tagcounter’]==0) {   
  
$tag 变量进入查询语句是被单引号包围的,但是我们恰好可以通过tagurldecode函数引入单引号,看代码
 
function tagurlencode($str) {//编码函数   
    $str=urlencode($str);   
    $str=str_replace(‘-‘, ‘–‘, $str);   
    $str=str_replace(‘%’, ‘-‘, $str);   
    return $str;   
}   
function tagurldecode($str) { //解码函数   
    $str=str_replace(‘-‘, ‘%’, $str);   
    $str=str_replace(‘%%’, ‘-‘, $str);   
    $str=urldecode($str);   
    return $str;   
}   
漏洞利用:
http://www.target.com/index.php?act=tag&job=show&rewrite=1&tag=aaaa-27
解决方案:
厂商补丁:
BO-Blog
———-
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.bo-blog.com/
发表评论?

0 条评论。

发表评论