### 简要描述: 大汉网络JCMS恶意篡改,覆盖全局配置文件漏洞,范围广、危害大。 ### 详细说明: 测试版本:Version 2010 2.4,其他版本似乎也存在此问题。范围很广。 [<img src="https://images.seebug.org/upload/201404/14212023273f541dff350aa868c5a63744691412.png" alt="clipboard.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/14212023273f541dff350aa868c5a63744691412.png) ### 漏洞证明: 利用方式一:全局配置文件覆盖。 源文件/jcms/setup/opr_setting.jsp: ``` //程序开始执行,没有任何权限限制,直接能够访问。 String strRealPath = application.getRealPath(""); strRealPath = strRealPath.replace('\\','/'); jcms.sys.Install install = new jcms.sys.Install( strRealPath ); install.setMerpHome( ); //获取动态参数,没有任何过滤,直接传入参数。 String servername = Convert.getParameter( request,"servername"); String jndi = Convert.getParameter( request,"jndi"); String adminpwd = Convert.getParameter( request,"adminpwd"); String lucserver1 = Convert.getParameter( request,"lucserver1"); String rssserver1 = Convert.getParameter( request,"rssserver1"); String debug1 = "1"; //Convert.getParameter(...
### 简要描述: 大汉网络JCMS恶意篡改,覆盖全局配置文件漏洞,范围广、危害大。 ### 详细说明: 测试版本:Version 2010 2.4,其他版本似乎也存在此问题。范围很广。 [<img src="https://images.seebug.org/upload/201404/14212023273f541dff350aa868c5a63744691412.png" alt="clipboard.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/14212023273f541dff350aa868c5a63744691412.png) ### 漏洞证明: 利用方式一:全局配置文件覆盖。 源文件/jcms/setup/opr_setting.jsp: ``` //程序开始执行,没有任何权限限制,直接能够访问。 String strRealPath = application.getRealPath(""); strRealPath = strRealPath.replace('\\','/'); jcms.sys.Install install = new jcms.sys.Install( strRealPath ); install.setMerpHome( ); //获取动态参数,没有任何过滤,直接传入参数。 String servername = Convert.getParameter( request,"servername"); String jndi = Convert.getParameter( request,"jndi"); String adminpwd = Convert.getParameter( request,"adminpwd"); String lucserver1 = Convert.getParameter( request,"lucserver1"); String rssserver1 = Convert.getParameter( request,"rssserver1"); String debug1 = "1"; //Convert.getParameter( request,"debug1"); ...... //写merpserver.ini配置文件,直接对全局配置信息进行覆盖。 String iniPath = strRealPath + "/WEB-INF/ini/merpserver.ini"; boolean bl = false; String strMsg = ""; com.hanweb.common.util.IniFile ini = new com.hanweb.common.util.IniFile( iniPath ); bl = ini.readIni(); if(bl){ ini.setIniValue("WebServer",servername); ini.setIniValue("AppPath",jndi); ini.setIniValue("DBType",dbtypename); ini.setIniValue("AdminPW",adminpwd); ini.setIniValue("loglevel",debug1); ini.setIniValue("b_index",lucserver1); ini.setIniValue("b_rss",rssserver1); ini.setIniValue("publishfiletype",publishfiletype); ...... ini.writeIni(); strMsg = "alert('配置文件修改完成,请重新启动服务!');\n"; ``` 覆盖管理员密码,直接重置管理员密码。 源文件/jcms/setup/opr_login.jsp: ``` String iniPath = strRealPath + "/WEB-INF/ini/merpserver.ini"; com.hanweb.common.util.IniFile ini = new com.hanweb.common.util.IniFile( iniPath ); ini.readIni(); strNewPwd = ini.getIniValue("AdminPW"); //直接由全局配置文件,获取密码。通过覆盖全局配置中AdminPW的值,可以修改密码。 if( !user.trim().equals("admin")) { strMessage = "用户名不正确!"; } else if( !pwd.trim().equals( strNewPwd.trim() )) { strMessage = "密码不正确!"; } else { strMessage = "登陆成功!"; ``` 利用方式二,数据库信息覆盖。 访问:/jcms/setup/publishadmin.jsp [<img src="https://images.seebug.org/upload/201404/1421423291b1cff25b6351a48f2ea11248576b69.png" alt="clipboard.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/1421423291b1cff25b6351a48f2ea11248576b69.png) 写入相应配置后,提交到/setup/opr_publishsetting.jsp处理。 分析源码/jcms/setup/opr_publishsetting.jsp ``` <%@page import="com.hanweb.common.util.Convert"%> <%@ page contentType="text/html;charset=UTF-8"%> <% //程序开始执行,没有任何权限限制,直接能够访问。 String strRealPath = application.getRealPath(""); jcms.sys.Install install = new jcms.sys.Install( strRealPath ); install.setMerpHome( ); //获取动态参数,没有任何过滤,直接传入参数。 String servername = Convert.getParameter( request,"servername"); String jndi = Convert.getParameter( request,"jndi"); String debug1 = Convert.getParameter( request,"debug1"); String dbtypename = Convert.getParameter( request,"dbtypename"); String dbtype = Convert.getParameter( request,"dbtype"); //写merpserver.ini配置文件,直接对数据库配置信息进行覆盖。 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("WebServer",servername); ini.setIniValue("AppPath",jndi); ini.setIniValue("DBType",dbtypename); ini.setIniValue("loglevel",debug1); ini.writeIni(); ``` 至此,merpserver.ini被任意覆盖,服务器正常运行需要其中的配置,利用此漏洞,可导致网站瘫痪,或恶意篡改。