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

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

缺陷编号:wooyun-2014-064246

漏洞标题:PHPYUN最新版SQL注入(绕过防御)

相关厂商:php云人才系统

漏洞作者: xfkxfk

提交时间:2014-06-10 09:17

修复时间:2014-09-08 09:18

公开时间:2014-09-08 09:18

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

PHPYUN最新版(phpyun_v3.1.0604_gbk)SQL注入(绕过防御)

详细说明:

PHPYUN最新版:phpyun_v3.1.0604_gbk
文件/member/model/index.class.php

function resume_ajax_action()
{
include(PLUS_PATH."user.cache.php");
$table="resume_".$_POST['type'];
$id=(int)$_POST['id'];
$info=$this->obj->DB_select_once($table,"`id`='".$id."'");
$info['skillval']=$userclass_name[$info['skill']];
$info['ingval']=$userclass_name[$info['ing']];
$info['sdate']=date("Y-m-d",$info['sdate']);
$info['edate']=date("Y-m-d",$info['edate']);
if(is_array($info))
{
foreach($info as $k=>$v)
{
$arr[$k]=iconv("gbk","utf-8",$v);
}
}
echo json_encode($arr);die;
}


这里的$table="resume_".$_POST['type'];
没有过滤,直接进入数据库:$info=$this->obj->DB_select_once($table,"`id`='".$id."'");
跟进DB_select_once函数:

function DB_select_once($tablename, $where = 1, $select = "*") {
$cachename=$tablename.$where;
if(!$return=$this->Memcache_set($cachename)){
$SQL = "SELECT $select FROM " . $this->def . $tablename . " WHERE $where limit 1";
$query = $this->db->query($SQL);
$return=$this->db->fetch_array($query);
$this->Memcache_set($cachename,$return);
}
return $return;
}


依然没有处理,所以,这里导致注入。
因为PHPYUN使用了360webscan的规则等一些防御措施
文件/data/db.safety.php:

function gpc2sql($str) {
if(preg_match("/select|insert|update|delete|union|into|load_file|outfile/is", $str))
{
exit(safe_pape());
}
$arr=array(" and "=>" an d "," or "=>" ��r ","%20"=>"","select"=>"��elect","update"=>"��pdate","count"=>"��ount","chr"=>"��hr","truncate"=>"��runcate","union"=>"��nion","delete"=>"��elete","insert"=>"��nsert");
foreach($arr as $key=>$v){
$str = preg_replace('/'.$key.'/isU',$v,$str);
}
return $str;
}


像 and 1=1等这些会被过滤
那么使用/**/and 1+1=1和/**/and 1+1=2就能搞定了
而且这里还因为平衡权限造成了信息泄露,我们通过查询不同的表,遍历id得到所有用户的简历信息包括电话,email等信息。

漏洞证明:

1.png


没有信息返回

2.png


返回id=1的信息
通过遍历得到user()=root

修复方案:

过滤,加引号保护。

版权声明:转载请注明来源 xfkxfk@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-06-10 10:12

厂商回复:

感谢您的提供,我们会尽快修复!

最新状态:

暂无


漏洞评价:

评论

  1. 2014-06-10 09:22 | neal ( 普通白帽子 | Rank:219 漏洞数:23 )

    ....大牛就是大牛 我研究了一天也没绕过 直接过滤了 select 字符串 我很想知道是怎么绕过的 难道能不经过过滤?

  2. 2014-06-10 09:25 | 梧桐雨 认证白帽子 ( 核心白帽子 | Rank:1576 漏洞数:184 | 关注技术与网络安全)

    @neal 我猜应该是宽字节

  3. 2014-06-10 09:37 | neal ( 普通白帽子 | Rank:219 漏洞数:23 )

    @梧桐雨 我肯定考虑过啊 但直接过滤 SELECT字符串 宽字节也有办法? 宽字节只是吃单引号嘛 (本人小菜 只知道吃单引号)自带过滤 G P C 都要过滤的 只要遇到SELECT 不区分大小写 同意替换成  select

  4. 2014-06-10 11:10 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    结果不是 等公开讨论吧

  5. 2014-06-10 11:15 | neal ( 普通白帽子 | Rank:219 漏洞数:23 )

    难道又是FUZZ?

  6. 2014-06-10 14:14 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    哭瞎了,大哥就是大哥

  7. 2014-06-14 22:40 | Xser ( 普通白帽子 | Rank:194 漏洞数:61 | JDSec)

    phpyun快被玩烂了