S2-016——Struts2漏洞分析及复现(CVE-2013-2251)

漏洞原理:

空虚浪子新大牛是这么描述这个漏洞的:”在struts中,框架接收到的用户输入,除了参数、值以外,还有其他地方,比如文件名。这个漏洞,是struts2对url中的文件名做了解析,导致的ognl代码执行。”

官方是这样描述这个漏洞产生原因的:Struts2的DefaultActionMapper支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的 struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致ongl表达式可以被执行。

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。OGNL可以让我们用非常简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达式person.address[0].province可以访问到user1的person属性的第一个address的province属性。

影响版本:

漏洞影响版本:Struts 2.0.0 – Struts 2.3.15 可直接导致服务器被远程控制从而引起数据泄漏,影响巨大

漏洞复现:

1、如图为所搭建的环境:

2、利用struts2检测工具对其进行检测:

3、用漏洞利用工具验证漏洞:

 

### Struts2 S2-048 漏洞复现 #### 准备工作 为了成功复现Struts2 S2-048远程命令执行漏洞(CVE-2017-9791),需准备如下环境: - 安装并配置好Apache Tomcat服务器以及Java开发环境。 - 下载受影响版本的Struts2框架,具体来说是Struts 2.3.5至Struts 2.3.31, 或者Struts 2.5至Struts 2.5.10之间的任意一个版本[^2]。 #### 构建测试应用 创建一个新的Web应用程序项目,并将其部署到Tomcat上运行。此程序应包含至少一个带有表单提交功能的JSP页面用于触发该安全问题。确保所使用的Struts2库文件属于上述提到的影响范围内。 #### 利用POC验证漏洞 利用已知的有效Payload来尝试攻击目标站点。对于S2-048而言,可以构造特定形式的HTTP请求参数,使得当这些参数被用来预填充HTML输入框时能够被执行为OS命令。例如,在登录界面中加入恶意字符串作为用户名或密码字段的内容,格式类似于`%{new java.lang.ProcessBuilder('whoami').start()}`这样的OGNL表达式[^3]。 ```bash curl "http://localhost:8080/yourapp/login.action?username=%{#a=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#b=#a.println(new+java.io.BufferedReader(new+java.io.InputStreamReader(@java.lang.Runtime@getRuntime().exec('id').getInputStream())).readLine()),#c=#a.close()}&password=anything" ``` 以上命令通过向存在缺陷的应用发送特制POST请求实现对操作系统级别的指令调用,这里以获取当前用户的ID为例进行了展示。如果一切正常,则会在响应体里看到相应的输出结果。 请注意实际操作过程中应当遵循合法合规的原则,在授权许可下的实验环境中开展研究活动;切勿非法入侵他人信息系统!
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值