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

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

缺陷编号: WooYun-2014-64246

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

相关厂商: php云人才系统

漏洞作者: xfkxfk认证白帽子

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

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

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 第三方不可信程序 php源码审核 sql注射漏洞利用技巧 php源码分析 白盒测试

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

code 区域
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函数:

code 区域
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:

code 区域
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

厂商回复:

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

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

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

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

  2. 2014-06-10 09:25 | 梧桐雨 认证白帽子 ( 核心白帽子 | Rank:1643 漏洞数:189 | 学无止境)
    0

    @neal 我猜应该是宽字节

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

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

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

    结果不是 等公开讨论吧

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

    难道又是FUZZ?

  6. 2014-06-10 14:14 | phith0n 认证白帽子 ( 普通白帽子 | Rank:804 漏洞数:125 | 一个想当文人的黑客~)
    0

    哭瞎了,大哥就是大哥

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

    phpyun快被玩烂了

登录后才能发表评论,请先 登录