前言:
今天朋友们对“apache struts版本查看”大致比较注意,朋友们都需要分析一些“apache struts版本查看”的相关知识。那么小编在网上网罗了一些有关“apache struts版本查看””的相关知识,希望姐妹们能喜欢,朋友们一起来了解一下吧!最近struts2出现漏洞,攻击者可以远程执行代码命令,上传木马文件至服务器,获取服务器控制权限等, 公司老项目用的是2.3版本的,目前要升级到2.5保证项目不被攻击,专门研究了一周左右终于升级成功了。修补建议 官方已发布了安全补丁,建议将struts2.3升级到 2.5 或以上。 下载struts2.5.30依赖包
Index of /dist/struts/2.5.30
下载struts-2.5.30-min-lib.zip 这个文件
解压后文件如下:
删除log4j-api-2.12.4.jar文件中的META-INF\versions\9META-INF\versions\9\module-info.class文件,不删启动会报错。
解压后的jar文件拷贝到工程中的WEB-INF/lib目录中.
在WEB-INF/lib目录中删除旧的jar文件,jar文件如下:
下载log4j2.12.1
struts2.5.30需要apache-log4j-2.12.1版本。
下载地址:
解压后的文件log4j-core-2.12.1.jar拷贝到WEB-INF/lib目录中.
所有替换完的jar包结构如下:
拷入配置文件:log4j2.component.properties
log4j2.component.properties文件拷贝到src\main\resources目录
文件内容如下:
log4j2.loggerContextFactory=org.apache.logging.log4j.core.impl.Log4jContextFactory
log4j.configurationFile=log4j2.xml
拷入配置文件:log4j2.xml
log4j2.xml文件拷贝到src\main\resources目录
文件内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ";>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->
<configuration status="TRACE" monitorInterval="300">
<!--先定义所有的appender -->
<appenders>
<!--这个输出控制台的配置 -->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式 -->
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
<File name="log" fileName="=D:/GENDMS_FILE/logs/test.log" append="false">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="RollingFileInfo"
fileName="D:/GENDMS_FILE/logs/info.log"
filePattern="D:/GENDMS_FILE/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn"
fileName="D:/GENDMS_FILE/logs/warn.log"
filePattern="D:/GENDMS_FILE/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20" />
</RollingFile>
<RollingFile name="RollingFileError"
fileName="D:/GENDMS_FILE/logs/error.log"
filePattern="D:/GENDMS_FILE/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout
pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="all">
<appender-ref ref="Console" />
<appender-ref ref="RollingFileInfo" />
<!--appender-ref ref="RollingFileWarn" /-->
<appender-ref ref="RollingFileError" />
</root>
</loggers>
</configuration>
修改struts.xml文件
头部改为:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" ";>
增加DynamicMethodInvocation配置
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
修改后如下:
修改web.xml文件
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>
去掉ng,修改为:
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>
处理启动报错
jar包冲突
删除jaxb下的 xercesImpl-2.6.2.jar 解决启动报错
再次启动依然报错,提示jar包类找不到,把原本来的class字节码复制到新版本
解决方案把原来struts2-core-2.5.30.jar下面的org/apache/struts2/dispatcher的class字节码添加到2.5版本下,字节码如下
两个字节码放到struts2-core-2.5.30.jar目录的org/apache/struts2/dispatcher下面
ServletDispatcherResult.class
StrutsResultSupport.class
启动日志报错了
原来日志如下:
日志文件修改如下:
按照上面的步骤配置完,项目就启动起来了,也就升级成功了。
标签: #apache struts版本查看