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

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

缺陷编号:wooyun-2014-061344

漏洞标题:大汉版通系统再次getshell(需登陆)

相关厂商:南京大汉网络有限公司

漏洞作者: 路人甲

提交时间:2014-05-18 22:01

修复时间:2014-08-16 22:02

公开时间:2014-08-16 22:02

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

大汉版通系统可以再次getshell,外加一处任意文件下载

详细说明:

注:该系统为信息公开系统(xxgk)
另外这个漏洞同样比较有意思,不知道程序员的逻辑是什么..
#1 任意文件下载

/xxgk/m_5_7/replace/export.jsp


代码为

<%@page contentType="text/html;charset=iso8859-1"%>
<%@page import="jcms.util.DownFile"%>
<%@page import="com.hanweb.common.util.Convert"%>
<%
//原文件名
String strFileName = Convert.getParameter(request, "filename");
strFileName = strFileName == null ? "" : strFileName;
//要保存的文件名
String downloadname = Convert.getParameter(request, "savename");
downloadname = new String(downloadname.getBytes("UTF-8"), "8859_1");
if (!DownFile.getFile(strFileName, downloadname, response, "UTF-8")) {
out
.println(Convert
.getAlterScript("alert('下载失败!');"));
}
%>


可以看出filename和savename直接get提交,SO..
#2 getshell

/xxgk/m_5_7/replace/opr_importinfo.jsp


产生漏洞的代码为

<%
//...
// 表单变量初始化
String strTpl_i_ID = "";
String strTpl_fn_billstatus = "S";//初始化操作状态
// 基本变量初始化
String strFilePath = "";
String strFileName = "";
strFilePath = application.getRealPath("") + "/m_5_7/replace/temp/";
Jcms_ReplaceBLF blf = new Jcms_ReplaceBLF(sys);
// 保存状态 -- 新增S或者更新B
if (strBillStatus.equals("S")) {
//创建文件路径
Convert.createDirectory(strFilePath);
String strMsg = "";
String strIllMsg = "";
//上传图片
CommonUploadFile upload = new CommonUploadFile(strFilePath, "");
SysInit.init();
if (SysInit.m_strImportNoFileType == null) {
upload.setM_Notfiletype("exe,com,bat,php,asp,php3,phtml,jsp,aspx");
} else {
upload.setM_Notfiletype(SysInit.m_strImportNoFileType);
}
boolean bResult = upload.uploadFile(request);
return;
String strUpFileName = "";
if (bResult) {
String[] strFiles = upload.getAllFileName();
jcms.filter.FilterWordParse parse = new jcms.filter.FilterWordParse();
File file;
Vector vReplace = new Vector();
Hashtable ht;
for (int i = 0; i < strFiles.length; i++) {
strUpFileName = strFilePath + strFiles[i];
file = new File(strUpFileName);
if (!file.exists()) {
com.hanweb.common.log.LogWriter.debug("文件不存在!");
continue;
}
}


上述代码有以下几个关键点

1.上传文件保存的路径
strFilePath = application.getRealPath("") + "/m_5_7/replace/temp/";
2.限制上传文件类型(黑名单不靠谱)
upload.setM_Notfiletype("exe,com,bat,php,asp,php3,phtml,jsp,aspx");


另外上传文件做了客户端验证(客户端同样不靠谱,直接bypass)
对于关键点2,经过多次测试验证发现,这段代码并没有起到任何作用,直接无视即可..
#3 漏洞验证
由于网上有大量的实例,任意选取几个案例进行测试验证..
First:首先将我们要上传的文件改名为shell.xml,之后抓包再改回来..
在验证之前简单说下比较有意思的地方,当我们点击上传的时候,采用Burp suite抓包修改,提交即可,如图

1.jpg


上图中有两处需要修改的地方:

Content-Disposition: form-data; name="file1"; filename="shell.xml"
修改为:
Content-Disposition: form-data; name="file3"; filename="shell.jsp"
注意:name必须修改为非file1,要不然无法成功上传(这里就是我觉得比较有意思的地方)


提交后会就会在 /m_5_7/replace/temp/ 目录下生成shell.jsp
案例一:

http://xxgk.weifang.gov.cn/xxgk/m_5_7/replace/opr_importinfo.jsp?fn_billstatus=1


11.jpg


案例二:

http://xxgk.lyg.gov.cn//xxgk/m_5_7/replace/opr_importinfo.jsp?fn_billstatus=1


22.jpg


漏洞证明:

#证明
案例一:

http://xxgk.weifang.gov.cn/xxgk/m_5_7/replace/opr_importinfo.jsp?fn_billstatus=1


11.jpg


案例二:

http://xxgk.lyg.gov.cn//xxgk/m_5_7/replace/opr_importinfo.jsp?fn_billstatus=1


22.jpg

修复方案:

严格限制文件

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-05-19 10:01

厂商回复:

感谢关注

最新状态:

暂无