Java安全—SpringBootActuator监控泄露Swagger自动化

server/2024/12/19 0:27:20/

前言

今天依旧是SpringBoot框架,估计还要一篇文章才能把它写完,没办法,Java安全的内容太多了。

Actuator

SpringBoot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用,简单来说就是一个监控的模块。

项目搭建

同样还是先来搭建一个项目,新建一个项目叫Actuator-demo,注意这里第三方引用还是阿里云。

选择依赖项。

可以查看一下配置文件。

我们把项目运行一下,控制台可以看到默认访问路径。

访问可以看到一堆接口。

直接找了一张图片,可以对照各接口是干啥的。

Actuator的安全问题主要是信息泄露这一块,从上图不难发现如果没有做限制,那么我们访问的信息是很多的。

比如我访问http://127.0.0.1:8081/actuator/env,可以看到我整个环境的配置信息。

现在搞个图形化的界面就一目了然了,新建一个项目叫Actuator-client,依赖选择客户端的。

客户端配置文件如下,防止端口冲突,所以我改为8089。

接着再新建一个服务端的项目,叫Actuator-server,依赖项选择服务端的。

服务端的配置端口为改为8888,要和我们客户端的访问端口一样。

服务端启动文件这里要引入依赖。

把客户端项目和服务端项目都启动一下,访问127.0.0.0:8888,是一个图形化页面。

点击进去可以看到监控信息的图形化页面,

安全问题

很多的SpringBoot框架都会用到Actuator这个监控组件,首当其冲的安全问题就是heapdump泄漏,这是由于开发者不正确的配置所导致的。我们回答Actuator-demo这个项目,把它运行起来。

访问 http://127.0.0.1:8081/actuator/heapdump 把文件下载下来。

这个heapdump直接打开是查看不了滴,我们要用专门的查看工具,这里用jdk自带的工具jvisualvm.exe,在jdk的bin目录下面。

打开之后就可以看到一堆的配置信息。

这个自带的工具不会给你自动的提取信息,比如账号密码啥的,我们可以用JDumpSpider这个工具去帮助我们提取一些有用的信息。

https://github.com/whwlsfb/JDumpSpider/releases

java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump

自动提取信息,比如什么OSS资源,账号密码等,因为我这里没有配置所以啥也没。

我们可以再新建一个项目去配置一些信息去验证一下,选择依赖项。

项目配置文件写入如下代码,配置一下数据库。

server.port=8888
spring.datasource.url=jdbc:mysql://localhost:3306/demo1
spring.datasource.name=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

访问http://127.0.0.1:8888/actuator/heapdump 把heapdump文件下载下来,此时我们再用工具去提取信息,便可以看到数据库的密码和配置等。

只要我们在配置文件加入这两个行代码,那么env和heapdump就不再可以被访问。

management.endpoint.heapdump.enabled=false
management.endpoint.env.enabled=false

Swagger

这是SpringBoot框架的一个接口系统,可以理解为它管理框架的所有接口,方便开发人员测试。

还是老规矩,新建一个项目叫swagger-demo,添加依赖。

由于SpringBoot并没有自带swagger的依赖,我们需要自己引入,分别有2版本和3版本的。二者并无太大的区别,如果你用的SpringBoot版本比较高,就可能会出现兼容性问题,我这里用的SpringBoot版本是阿里云的2.6.13,对于2和3版本的swagger都适用,如果你用3.x的SpringBoot可能会出现不兼容2版本的swagger

可参考文章:https://blog.csdn.net/lsqingfeng/article/details/123678701

<--2.9.2版本-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

可以看到导入的依赖。

如果有端口冲突就修改一下配置文件,并且加一句代码,不然会报错。

访问http://127.0.0.1:8002/swagger-ui.html。

我这里写了一些接口,比如什么hello、user、theonefx。

swagger页面我们都可以看到。

为了更加直观,我们新建一个Java类,叫Testcontroller,并且写入以下代码,一个是POST传那么参数,一个是get传name参数。

@Controller
public class TestController {@GetMapping("/getdata")@ResponseBodypublic String getdata(@RequestParam String name){return "get have data " +name;}@PostMapping("/postdata")@ResponseBodypublic String postdata(@RequestParam String name){return "post have data " +name;}
}

此时我们再重新运行项目,可以看到多了个test-controller的测试接口。

点开确实是我们写好的接口,参数也帮你写好了。

我们随便填个参数测试一下,也是没问题的。

在实战中往往会有很多的接口,几百上千个,我们不可能一个一个地去提交数据测试,那咋办呢,这里用到我们之前说过的一个工具postman,去实现自动化测试。

首先复制我们的api。

点击API,选择Import导入。

选择链接导入。

可以看到有啥接口都给我们显示出来了。

点击Run会帮你全部测试一遍,不知道为啥我这里只有一个返回,可能配置啥的不对。

对于这个swagger一般都是接口泄露,比如什么登录接口、文件上传接口。

总结

本次主要讲了Actuatorswagger这两个常见的SpringBoot组件,主要的利用点都是信息泄露。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。


http://www.ppmy.cn/server/151302.html

相关文章

Javaweb:HTML、CSS

学习 资源1 学习资源 2 黑马javaweb HTML 1、基础标签、样式 图片标签&#xff1a;<img> src:绝对路径、相对路径(绝对磁盘路径&#xff0c;网络路径&#xff1b;./当前目录&#xff09;width:宽度&#xff08;百分比&#xff09;height:高度&#xff08;百分比&…

09篇--图片的水印添加(掩膜的运用)

如何添加水印&#xff1f; 添加水印其实可以理解为将一张图片中的某个物体或者图案提取出来&#xff0c;然后叠加到另一张图片上。具体的操作思想是通过将原始图片转换成灰度图&#xff0c;并进行二值化处理&#xff0c;去除背景部分&#xff0c;得到一个类似掩膜的图像。然后…

【数据分享】2013-2023年我国省市县三级的逐年CO数据(免费获取\excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2023年的省市县三级的逐年PM2.5数据、2000-2023年的省市县三级的逐年PM10数据、2013-2023年的省市县三级的逐年SO2数据、2000-2023年省市县三级的逐年O3数据和2008-2023年我国省市县三级的逐…

7_Sass Introspection 函数 --[CSS预处理]

Sass 的 Introspection 函数允许开发者检查和操作样式表的内部结构&#xff0c;包括选择器、属性、值等。这些函数提供了对编译过程中 Sass 文件内容的深入访问能力&#xff0c;使得更复杂的逻辑处理成为可能。以下是一些常用的 Sass Introspection 函数及其用法示例&#xff1…

OpenCV实验:图片加水印

第二篇&#xff1a;图片添加水印&#xff08;加 logo&#xff09; 1. 实验原理 水印原理&#xff1a; 图片添加水印是图像叠加的一种应用&#xff0c;分为透明水印和不透明水印。水印的实现通常依赖于像素值操作&#xff0c;将水印图片融合到目标图片中&#xff0c;常用的方法…

FFmpeg 音视频基础

文章目录 视频基础视频图像RGB颜色空间YUV颜色空间YUV种类YUV4:4:4YUV4:2:2YUV4:2:0YUV存储格式RGB与YUV相互转换 分辨率位深帧率码流步幅&#xff08;stride&#xff09; 音频基础采样位深采样率通道数PCM音频大小计算比特率音频码率音频帧音频帧的存储模式 音频编码原理频域掩…

《深入探究:C++ 在多方面对 C 语言实现的优化》

目录 一、C 在 C 上进行的优化二、C 关键字&#xff08;C 98&#xff09;三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…

游戏引擎学习第50天

仓库: https://gitee.com/mrxiao_com/2d_game Minkowski 这个算法有点懵逼 回顾 基本上&#xff0c;现在我们所处的阶段是&#xff0c;回顾最初的代码&#xff0c;我们正在讨论我们希望在引擎中实现的所有功能。我们正在做的版本是初步的、粗略的版本&#xff0c;涵盖我们认…