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. 漏洞程式碼分析
\member\special.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=" "; 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%'> $add</td> </tr>"; } } ...
5. 防禦方法
\member\special.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