当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-037962

漏洞标题:Z-Blog PHP版之三低权限管理员POST注入

相关厂商:Z-Blog

漏洞作者: 只发通用型

提交时间:2013-09-24 12:24

修复时间:2013-12-23 12:24

公开时间:2013-12-23 12:24

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-09-24: 细节已通知厂商并且等待厂商处理中
2013-09-24: 厂商已经确认,细节仅向厂商公开
2013-09-27: 细节向第三方安全合作伙伴开放
2013-11-18: 细节向核心白帽子及相关领域专家公开
2013-11-28: 细节向普通白帽子公开
2013-12-08: 细节向实习白帽子公开
2013-12-23: 细节向公众公开

简要描述:

注册个评论者账号就能注到管理员

详细说明:

木有找到你们接受POST变量的函数在哪,所以认为问题出在/zb_system/function/lib/dbsql.php

public function ParseWhere($where){
global $zbp;
$sqlw=null;
if(!empty($where)) {
$sqlw .= ' WHERE ';
$comma = '';
foreach($where as $k => $w) {
$eq=$w[0];
if($eq=='='|$eq=='<'|$eq=='>'|$eq=='LIKE'|$eq=='<>'|$eq=='!='){
$x = (string)$w[1];
$y = (string)$w[2];
$y = $zbp->db->EscapeString($y);
$sqlw .= $comma . " $x $eq '$y' ";
}
if($eq=='BETWEEN'){
$b1 = (string)$w[1];
$b2 = (string)$w[2];
$b3 = (string)$w[3];
$sqlw .= $comma . " $b1 BETWEEN '$b2' AND '$b3' ";
}
if($eq=='search'){
$j=count($w);
$sql_search='';
$c='';
for ($i=1; $i <= $j-1-1; $i++) {
$x=(string)$w[$i];
$y=(string)$w[$j-1];
$y=$zbp->db->EscapeString($y);
$y=$w[$j-1];
$sql_search .= $c . " ($x LIKE '%$y%') ";
$c='OR';
}
$sqlw .= $comma . '(' . $sql_search . ')';
}
if($eq=='array'){
$c='';
$sql_array='';
if(!is_array($w[1]))continue;
if(count($w[1])==0)continue;
foreach ($w[1] as $x=>$y) {
$y[1]=$zbp->db->EscapeString($y[1]);
$sql_array .= $c . " $y[0]='$y[1]' ";
$c='OR';
}
$sqlw .= $comma . '(' . $sql_array . ')';
}
if($eq=='custom'){
$sqlw .= $comma . '(' . $w[1] . ')';
}
$comma = 'AND';
}
}
echo $sqlw;//顺便把SQL语句ehco 出来,你们的拼接写得好蛋疼
return $sqlw;
}


1.jpg


注入方法的利用和这个一样 WooYun: Z-Blog的php版前台正则SQL盲注漏洞
,拿sqlmap跑一下就出来了

漏洞证明:

1.jpg

修复方案:

接受的POST都过滤一下

版权声明:转载请注明来源 只发通用型@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2013-09-24 13:38

厂商回复:

非常感谢!!!已着手处理中了。

最新状态:

2013-09-24:2013-09-24:dbsql.php第197行,删除就好了。