关于struts漏洞之---/struts/webconsole.html

本文介绍了如何通过修改Struts项目的配置文件来禁用敏感的Web控制台访问路径,避免直接暴露给外部,提供了两种有效的方法并附带实践验证。

使用扫描工具扫描出struts项目存放访问 路径:http:host:port/web//struts/webconsole.html,

刚开始以为是在项目的struts.xml配置文件中开启了开发模式,后来发现无论开启与否,甚至显式的关闭开发模式,这个链接都可以访问,

于是上网看看别人的解决办法,从先解决问题出发,按网上的办法进入如下路径:

struts2-core-*.jar\org\apache\struts2\interceptor\debugging\

删除了里面的所有静态文件,ftl,html,js,css,

再访问就变成404了,问题到此基础解决了,先交差吧,但,是否就只有这个“无奈”的解决方法呢?

于是将视线转向国外,在SO上找到如下两个自称解决办法的“办法”:

struts.xml中添加<constant name="struts.action.excludePattern" value="/struts/webconsole.html" />

web.xml中添加

<security-constraint>
  <web-resource-collection>
    <web-resource-name>OGNLconsole</web-resource-name>
    <url-pattern>*/struts/webconsole.*</url-pattern>
  </web-resource-collection>
</security-constraint>

经测试,这两种都“不能”解决问题,为什么使用双引号呢,因为如果真一点用的都没有,就干脆不用提了,

这两种方法方法都基于一种思想:权限,

第一种方法是想把某些url排除,而第二种方法也是对url进行详细配置,包括权限,

经过改良,第一种改成,必须使用 * ,不能是详细的后缀等形式

<constant name="struts.action.excludePattern" value="/static/.*" />

第二种改成正好相反,必须详细到后缀,不能使用万用格式 *

<security-constraint>
  <web-resource-collection>
    <web-resource-name>OGNLconsole</web-resource-name>
    <url-pattern>/struts/webconsole.
html</url-pattern>
  </web-resource-collection>
  <auth-constraint/>
</security-constraint>

至此,经过改良,已经不需要再对jar包进行修改了,应用的配置功能得以体现。

### ### 升级前的准备工作 在将 `struts2-core` 从版本 2.3.32 升级到 2.5.33 之前,需要对现有项目进行全面评估。Struts22.5.x 版本中引入了多项重大变更,包括模块化架构调整、默认拦截器栈重命名、安全机制增强等。这些变化可能影响已有功能的正常运行。 为了确保兼容性,建议在升级前备份所有关键配置文件(如 `struts.xml`, `web.xml`)和依赖库。同时,应使用本地测试环境进行验证,避免直接在生产环境中操作。 --- ### ### 核心依赖更新与兼容性处理 将旧版本的 `struts2-core-2.3.32.jar` 替换为 `struts2-core-2.5.33.jar` 后,需同步更新其他相关依赖包。例如: ```xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.33</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.5.33</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.5.33</version> </dependency> ``` 由于 Struts2 2.5 引入了模块化设计,部分原本集成在核心包中的功能被拆分为独立插件。若项目中使用了 JSON 数据交互或基于注解的配置方式,则必须显式引入对应的插件包[^1]。 此外,XWork 库作为 Struts2 的核心组件之一,其版本也需与新版本保持一致。确保 `xwork-core` 更新至与 Struts2 2.5.33 兼容的版本,以修复已知的安全漏洞并提升性能[^3]。 --- ### ### 配置文件与行为变更适配 Struts2 2.5 版本中,默认拦截器栈名称由 `defaultStack` 更改为 `default`,并且新增了更严格的安全限制,例如对动态方法调用(DMI)的默认禁用。因此,若项目中存在类似 `action!method` 的调用方式,需在 `struts.xml` 中启用该功能: ```xml <constant name="struts.enable.DynamicMethodInvocation" value="true"/> ``` 此外,OGNL 表达式的安全性也得到加强,默认情况下不允许执行某些高风险操作。如果业务逻辑中涉及复杂表达式或反射调用,需通过配置白名单来允许特定类或方法执行: ```xml <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> ``` 在配置文件方面,需将 `struts.xml` 文件头部的 DTD 声明更新为 2.5 版本,以确保 XML 解析器正确识别新语法: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> ``` 此更改有助于避免因版本不匹配导致的配置解析错误[^2]。 --- ### ### 参数传递与模型驱动适配 Struts2 2.5 版本继续支持属性驱动和模型驱动的参数传递方式。但在模型驱动模式下,值栈的行为有所变化,可能导致数据绑定异常。若发现字段无法正确映射,应检查是否启用了自动封装功能,并确认 Action 类实现了 `ModelDriven` 接口且正确返回了模型对象。 对于返回 JSON 数据的需求,建议使用 `struts2-json-plugin` 插件提供的 `json` 结果类型,而非手动转换。示例配置如下: ```xml <result name="success" type="json"> <param name="root">data</param> </result> ``` --- ### ### 安全加固与废弃 API 替换 Struts2 2.5.x 系列修复了多个历史安全漏洞,包括远程代码执行(RCE)和 OGNL 沙盒绕过问题。尽管如此,仍需关注官方发布的安全公告,并及时应用补丁。 部分在 2.3.x 中使用的 API 已被标记为废弃,例如 `ServletActionContext.getServletContext()` 被推荐替换为 `ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT)`。建议使用 IDE 的“查找废弃方法”功能逐个排查并更新代码。 --- ### ### 性能优化与监控策略 合理配置拦截器栈,避免不必要的拦截器造成性能损耗。可参考以下方式定义精简的拦截器栈,仅保留必要的功能模块: ```xml <interceptors> <interceptor-stack name="minimalStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="i18n"/> <interceptor-ref name="chain"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> </interceptor-stack> </interceptors> ``` 利用缓存技术,如页面片段缓存,可以显著提高响应速度。此外,使用监控工具如 Struts2 Console Plugin,实时跟踪请求处理时间、线程状态等关键指标,便于快速定位性能瓶颈。 配置详细的日志记录,尤其是对拦截器执行流程和异常信息的捕获,有助于后续的问题追踪和性能分析。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值