目录
SpringBoot-监控系统-Actuator
SpringBoot-接口系统-Swagger
思维导图
Java知识点:
功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方组件使用等.
框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等
技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,反射机制待补充
安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充
安全:原生开发安全,第三方框架安全,第三方组件安全等,架构分析,待补充
SpringBoot-监控系统-Actuator
SpringBoot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理 Spring Boot 应用。
Actutor断点图
新建项目,创建 spring 项目,依赖选择 Web 中的 Spring Web,Ops 中的 Spring Boot Actuator
引入依赖,当创建项目时未选择 actuator 依赖时,可在配置文件 pom.xml 中自行引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置监控,在 application.properties 进行如下配置
# 这个配置项是用于指定要暴露的web端点。*表示暴露所有端点。
management.endpoints.web.exposure.include=*
# 这个配置项用于指定是否显示健康检查的详细信息。always表示总是显示详细信息。
management.endpoint.health.show-details=always
然后就可以通过上面的断点图访问到actutor,会泄露一些关键信息
这里面会暴露出很多敏感信息
安全配置:在 application.properties 进行如下配置,关闭某些端点的启用,防止敏感信息泄露
从这里也可以看出来,/actuator/env 和 /actuator/heapdump 这两个目录下爆出来信息是很敏感
management.endpoint.env.enabled=false
management.endpoint.heapdump.enabled=false
再次尝试访问/actuator/env,/actuator/heapdump就会访问失败
图像化 Server&Client 端界面
Server:引入Server依赖-开启(@EnableAdminServer)
application.properties 配置信息
# 应用服务 WEB 访问端口 server.port=8889 spring.boot.admin.client.url=http://127.0.0.1:8888 management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always
Client:引入Client依赖-配置(连接目标,显示配置等)
application.properties 配置信息
## 应用服务 WEB 访问端口 #server.port=8080 ##下面这些内容是为了让MyBatis映射 ##指定Mybatis的Mapper文件 #mybatis.mapper-locations=classpath:mappers/*xml ##指定Mybatis的实体目录 #mybatis.type-aliases-package=cn.xiaodi.testactuatordemo1.mybatis.entity ## Actuator Web 访问端口 #management.server.port=8081 #management.endpoints.jmx.exposure.include=* #management.endpoints.web.exposure.include=* #management.endpoint.health.show-details=always server.port=7777 spring.datasource.url=jdbc:mysql://localhost:3306/demo01 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=* management.endpoint.heapdump.enabled=false management.endpoint.env.enabled=false
分别启动两个项目文件
安全问题:heapdump泄漏
得到对应heapdump包可以使用工具进行分析:获取到配置信息(分析提取出敏感信息(配置帐号密码,接口信息 数据库 短信 云应用等配置)访问这个路径,下载/actuator/heapdump这个文件
工具使用:JDumpSpider提取器https://github.com/whwlsfb/JDumpSpider/releases
可以帮助我们自动化从中提取敏感信息,里面包含类信息,可以直接到很多配置信息
工具使用:jvisualvm分析器
安装jdk自带,文件搜索获取
如:D:\jdk1.8.0_112\bin\jvisualvm.exe测试安装:JDK1.8_112
下载JDK:http://www.itmop.com/downinfo/136203.html
其他利用见下文
https://blog.csdn.net/drnrrwfs/article/details/125242990
分析得到有一些组件(不安全的组件,如log4j)
SpringBoot-接口系统-Swagger
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>
3.0.0
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
application.properties
# 应用服务 WEB 访问端口
server.port=8002
# 设置路径匹配策略为Ant路径匹配器
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
2.X 版本启动需要在启动文件添加注释 @EnableSwagger2
3.X 版本不需注释,写的话是 @EnableOpenApi
2.X 访问路径:http://ip:port/swagger-ui.html
3.X 访问路径:http://ip:port/swagger-ui/index.html
安全问题:
自动化测试:Postman
泄漏应用接口:用户登录,信息显示,上传文件等
可用于对未授权访问,信息泄漏,文件上传等安全漏洞的测试打开postman打开工作台,在左侧找到API
打开API导入生成的swagger页面提供的API:http://127.0.0.1:8080/v3/api-docs
导入成功后点击Api Documentation,点击右侧的运行,勾选想要测试的接口,执行即可也可以批量化测试