如何防范SpringBoot 相关漏洞?
Spring Boot可能是习惯于用Java的小伙伴们用的最多的一种应用框架,但是各位程序猿小伙伴知不知道Spring Boot有哪些平时不容易注意到的漏洞需要避免呢?
小编今天就给大家介绍一个GitHub上关于Spring Boot漏洞大集合的项目,不过要注意的是,这个项目的初衷可是让大家研究和测试这些漏洞,以防自己的程序留下不安全的后门,可不要故意使用这些漏洞造成他人的损害哟~
小编先带大家看下整个项目的目录:
- Spring Boot Vulnerability Exploit Check List
- 零:路由和版本
- 0x01:路由知识
- 0x02:版本知识
- 组件版本的相互依赖关系:
- Spring Cloud 与 Spring Boot 版本之间的依赖关系:
- Spring Cloud 小版本号的后缀及含义:
- 一:信息泄露
- 0x01:路由地址及接口调用详情泄漏
- 0x02:配置不当而暴露的路由
- 0x03:获取被星号脱敏的密码的明文 (方法一)
- 利用条件:
- 利用方法:
- 步骤一: 找到想要获取的属性名
- 步骤二:jolokia 调用相关 Mbean 获取明文
- 0x04:获取被星号脱敏的密码的明文 (方法二)
- 利用条件:
- 利用方法:
- 步骤一: 找到想要获取的属性名
- 步骤二: 使用 nc 监听 HTTP 请求
- 步骤三: 设置 eureka.client.serviceUrl.defaultZone 属性
- 步骤四: 刷新配置
- 步骤五: 解码属性值
- 0x05:获取被星号脱敏的密码的明文 (方法三)
- 利用条件:
- 利用方法:
- 步骤一: 找到想要获取的属性名
- 步骤二: 使用 nc 监听 HTTP 请求
- 步骤三: 触发对外 http 请求
- 步骤四: 刷新配置
- 0x06:获取被星号脱敏的密码的明文 (方法四)
- 利用条件:
- 利用方法:
- 步骤一: 找到想要获取的属性名
- 步骤二: 下载 jvm heap 信息
- 步骤三: 使用 MAT 获得 jvm heap 中的密码明文
- 二:远程代码执行
- 0x01:whitelabel error page SpEL RCE
- 利用条件:
- 利用方法:
- 步骤一:找到一个正常传参处
- 步骤二:执行 SpEL 表达式
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x02:spring cloud SnakeYAML RCE
- 利用条件:
- 利用方法:
- 步骤一: 托管 yml 和 jar 文件
- 步骤二: 设置 spring.cloud.bootstrap.location 属性
- 步骤三: 刷新配置
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x03:eureka xstream deserialization RCE
- 利用条件:
- 利用方法:
- 步骤一:架设响应恶意 XStream payload 的网站
- 步骤二:监听反弹 shell 的端口
- 步骤三:设置 eureka.client.serviceUrl.defaultZone 属性
- 步骤四:刷新配置
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x04:jolokia logback JNDI RCE
- 利用条件:
- 利用方法:
- 步骤一:查看已存在的 MBeans
- 步骤二:托管 xml 文件
- 步骤三:准备要执行的 Java 代码
- 步骤四:架设恶意 ldap 服务
- 步骤五:监听反弹 shell 的端口
- 步骤六:从外部 URL 地址加载日志配置文件
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x05:jolokia Realm JNDI RCE
- 利用条件:
- 利用方法:
- 步骤一:查看已存在的 MBeans
- 步骤二:准备要执行的 Java 代码
- 步骤三:托管 class 文件
- 步骤四:架设恶意 rmi 服务
- 步骤五:监听反弹 shell 的端口
- 步骤六:发送恶意 payload
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x06:restart h2 database query RCE
- 利用条件:
- 利用方法:
- 步骤一:设置 spring.datasource.hikari.connection-test-query 属性
- 步骤二:重启应用
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x07:h2 database console JNDI RCE
- 利用条件:
- 利用方法:
- 步骤一:访问路由获得 jsessionid
- 步骤二:准备要执行的 Java 代码
- 步骤三:托管 class 文件
- 步骤四:架设恶意 ldap 服务
- 步骤五:监听反弹 shell 的端口
- 步骤六:发包触发 JNDI 注入
- 漏洞分析:
- 漏洞环境:
- 0x08:mysql jdbc deserialization RCE
- 利用条件:
- 利用方法:
- 步骤一:查看环境依赖
- 步骤二:架设恶意 rogue mysql server
- 步骤三:设置 spring.datasource.url 属性
- 步骤四:刷新配置
- 步骤五:触发数据库查询
- 步骤六:恢复正常 jdbc url
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x09:restart logging.config logback JNDI RCE
- 利用条件:
- 利用方法:
- 步骤一:托管 xml 文件
- 步骤二:托管恶意 ldap 服务及代码
- 步骤三:设置 logging.config 属性
- 步骤四:重启应用
- 漏洞原理:
- 漏洞分析:
- 漏洞环境:
- 0x0A:restart logging.config groovy RCE
- 利用条件:
- 利用方法:
- 步骤一:托管 groovy 文件
- 步骤二:设置 logging.config 属性
- 步骤三:重启应用
- 漏洞原理:
- 漏洞环境:
- 0x0B:restart spring.main.sources groovy RCE
- 利用条件:
- 利用方法:
- 步骤一:托管 groovy 文件
- 步骤二:设置 spring.main.sources 属性
- 步骤三:重启应用
- 漏洞原理:
- 漏洞环境:
- 0x0C:restart spring.datasource.data h2 database RCE
- 利用条件:
- 利用方法:
- 步骤一:托管 sql 文件
- 步骤二:设置 spring.datasource.data 属性
- 步骤三:重启应用
- 漏洞原理:
- 漏洞环境:
以信息泄露为例,对于0x01:路由地址及接口调用详情泄漏,项目描述到:
开发人员没有意识到地址泄漏会导致安全隐患或者开发环境切换为线上生产环境时,相关人员没有更改配置文件,忘记切换环境配置等
可以直接访问以下两个 swagger 相关路由,验证漏洞是否存在:
/v2/api-docs
/swagger-ui.html
其他一些可能会遇到的 swagger、swagger codegen、swagger-dubbo 等相关接口路由:
/swagger
/api-docs
/api.html
/swagger-ui
/swagger/codes
/api/index.html
/api/v2/api-docs
/v2/swagger.json
/swagger-ui/html
/distv2/index.html
/swagger/index.html
/sw/swagger-ui.html
/api/swagger-ui.html
/static/swagger.json
/user/swagger-ui.html
/swagger-ui/index.html
/swagger-dubbo/api-docs
/template/swagger-ui.html
/swagger/static/index.html
/dubbo-provider/distv2/index.html
/spring-security-rest/api/swagger-ui.html
/spring-security-oauth-resource/swagger-ui.html
除此之外,下面的 spring boot actuator 相关路由有时也会包含(或推测出)一些接口地址信息,但是无法获得参数相关信息:
/mappings
/metrics
/beans
/configprops
/actuator/metrics
/actuator/mappings
/actuator/beans
/actuator/configprops
一般来讲,暴露出 spring boot 应用的相关接口和传参信息并不能算是漏洞,但是以 "默认安全" 来讲,不暴露出这些信息更加安全。
对于攻击者来讲,一般会仔细审计暴露出的接口以增加对业务系统的了解,并会同时检查应用系统是否存在未授权访问、越权等其他业务类型漏洞。
是不是浅显易懂,一下子就讲明白了整个漏洞的原理及校验方式?看完整个项目,一定能让大家学会如何利用方法和技巧,做到黑盒安全评估!想学习的小伙伴,赶紧跟着小编一起上车!
点击下方卡片,关注公众号“TJ君”
回复“漏洞”,获取项目地址
评论