• QIBO CMS SQL Injection Via Variable Uninitialization In memberspecial.php


    Catalog

    1. 漏洞描述
    2. 漏洞触发条件
    3. 漏洞影响范围
    4. 漏洞代码分析
    5. 防御方法
    6. 攻防思考

    1. 漏洞描述

    该漏洞存在于/member/special.php文件下,由于未对变量进行正确初始化,并在SQL查询中带入这个变量,导致黑客可以通过POST请求注入特殊构造的HTTP请求,通过为初始化变量进行SQL注入攻击

    Relevant Link:

    http://www.wooyun.org/bugs/wooyun-2015-0104959


    2. 漏洞触发条件

    1. 登录
    2. 进入show_BBSiframe
    3. 发布一个专题
    4. 进入show_BBSiframe


    3. 漏洞影响范围

    测试版本:V7.0


    4. 漏洞代码分析

    memberspecial.php

    ...
    if($type=='myatc'||$type=='all')
    {
        $detail=explode(",",$rsdb[tids]);
        $show='';
        if($page<1){
            $page=1;
        }
        $rows=15;
        $min=($page-1)*$rows;
        if($keywords){//搜索时
            $SQL=" BINARY subject LIKE '%$keywords%' ";
        }elseif($ismy){
            $SQL=" authorid='$lfjuid' ";
        }else{
            $SQL=' 1 ';
        }
        
        if($fid>0){
            $SQL.=" AND fid='$fid' ";
        }
        //$TB_pre未在全局变量中初始化带入查询导致注入
        $showpage=getpage("{$TB_pre}threads","WHERE $SQL","",$rows);
        //$TB_pre未在全局变量中初始化带入查询导致注入
        $query = $db->query("SELECT * FROM {$TB_pre}threads WHERE $SQL ORDER BY tid DESC LIMIT $min,$rows");
        if(ereg("^pwbbs",$webdb[passport_type])){            
            while($rs = $db->fetch_array($query)){
                $add="&nbsp;";
                if(!in_array($rs[tid],$detail)){
                    $add="<A HREF='special.php?job=show_BBSiframe&id=$id&type=list_atc&act=add&aid={$rs[tid]}' target='spiframe' onclick=closedo(this)>添加</A>";
                }
                $show.="<tr align='center' class='trA' onmouseover="this.className='trB'" onmouseout="this.className='trA'"> 
                    <td width='5%'>{$rs[tid]}</td>
                    <td width='84%' align='left'><a href='$webdb[passport_url]/read.php?tid=$rs[tid]' target=_blank>$rs[subject]</a></td>
                    <td width='11%'>&nbsp;$add</td>
                  </tr>";
            }
        }
    ...


    5. 防御方法

    memberspecial.php

    ...
    //论坛贴子
    elseif($job=="show_BBSiframe")
    {
        //判断系统是否存在dzbbs或pwbbs系统变量,防御未初始化变量注入
        if(!ereg("^dzbbs",$webdb[passport_type])&&!ereg("^pwbbs",$webdb[passport_type])){
            showerr('你没有整合对应版本的论坛!');
        }
        $rsdb=$db->get_one("SELECT * FROM {$pre}special WHERE uid='$lfjuid' AND id='$id'");
        if(!$rsdb){
            showerr("资料不存在",1);
        }
        ...
        if($type=='myatc'||$type=='all')
        {
            ...
            $showpage=getpage("{$TB_pre}threads","WHERE $SQL","",$rows);
            $query = $db->query("SELECT * FROM {$TB_pre}threads WHERE $SQL ORDER BY tid DESC LIMIT $min,$rows");
    ...


    6. 攻防思考

    Copyright (c) 2014 LittleHann All rights reserved

  • 相关阅读:
    预览graph取消item的value单位自动转换
    Elasticsearch内存分配设置详解
    Linux core 文件介绍
    案例一 整套项目打包部署
    Linux删除文件提示Operation not permitted的处理办法
    python优雅获取本机 IP 方法
    nginx open files limits 导致大量错误信息
    excel表格用协程插入到mysql
    mysql基本操作
    装饰器
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4413521.html
Copyright © 2020-2023  润新知