Springboot之Actuator的渗透测试和漏洞利用
背景概述
Spring的生态很优秀,而使用Spring Boot的开发者也比较多。
Actuator是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。常常使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。
实际挖掘 actuator 配置不当的漏洞分如下两步:
- 判断和识别测试项目的web 应用采用的框架为 springboot 框架;
- 尝试进行执行器端点路径的枚举(本文后面会有写到),并根据实际情况加以利用
一、如何识别Spring Boot
通常有两个方法:
- 1.访问WEB页面,观察地址栏或者标签页前面的icon图标,是否为绿色小树叶(开发者没有修改的情况下,spring 框架默认为该图标)

- 2.构造错误的目录或者文件名等,让 Springboot 框架产生默认的报错页面(如开发人员没有修改Springboot框架的默认400系列、500系列的报错页面,会报错如下(也被称为白标签报错页),到这里基本可以确定Spring Boot框架。

综合利用:
在实际中可以综合两个方法一起进行判断,比如先观察有无绿色树叶图标。
尝试访问不同的目录,尝试在不同目录下400系列或500系列的报错,观察是否出现 Whitelabel Error Page 提示信息。当确定使用了springboot 框架后,就可以尝试进行第二步的端点路径的枚举了
二、端点路径的枚举
通过手动或者脚本来枚举测试网站的所有父目录和子目录,然后用脚本对前一步的每个目录进行探测,确定是否存在 actuator 执行端点的路径。
Actuator 提供的执行器端点分为两类:原生端点和用户自定义扩展端点
原生端点主要包括:
| 路径 | 描述 | 
|---|---|
| /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 | 
| /beans | 描述应用程序上下文里全部的Bean,以及它们的关系 | 
| /env | 获取全部环境属性 | 
| /env/{name} | 根据名称获取特定的环境属性值 | 
| /dump | 获取线程活动的快照 | 
| /health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 | 
| /info | 获取应用程序的定制信息,这些信息由info打头的属性提供 | 
| /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数 | 
| /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true | 
| /trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) | 
| /heapdump | 返回一个GZip压缩的JVM堆dump | 
需要注意
有些程序员会自定义/manage、/management 、项目App相关名称为 spring 根路径
Spring Boot Actuator 1.x 版本默认内置路由的起始路径为 / ,2.x 版本则统一以 /actuator 为起始路径
Spring Boot Actuator 默认的内置路由名字,如 /env 有时候也会被程序员修改,比如修改成 /appenv
对于寻找漏洞比较重要接口的有:
- /env、- /actuator/env- GET 请求 - /env会直接泄露环境变量、内网地址、配置中的用户名等信息;当程序员的属性名命名不规范,例如 password 写成 psasword、pwd 时,会泄露密码明文;- 同时有一定概率可以通过 POST 请求 - /env接口设置一些属性,间接触发相关 RCE 漏洞;同时有概率获得星号遮掩的密码、密钥等重要隐私信息的明文。
- /trace、- /actuator/httptrace- 一些 http 请求包访问跟踪信息,有可能在其中发现内网应用系统的一些请求信息详情;以及有效用户或管理员的 cookie、jwt token 等信息。 
- /refresh、- /actuator/refresh- POST 请求 - /env接口设置属性后,可同时配合 POST 请求- /refresh接口刷新属性变量来触发相关 RCE 漏洞。
- /restart、- /actuator/restart- 暴露出此接口的情况较少;可以配合 POST请求 - /env接口设置属性后,再 POST 请求- /restart接口重启应用来触发相关 RCE 漏洞。
- /jolokia、- /actuator/jolokia- 可以通过 - /jolokia/list接口寻找可以利用的 MBean,间接触发相关 RCE 漏洞、获得星号遮掩的重要隐私信息的明文等。
三、漏洞的利用
在上一步,如果确定发现了 actuator 的配置漏洞,如需要证明或继续利用该漏洞挖掘其他漏洞,进而组合利用等等,就需要进行其他操作,总结几个常见利用场景
以下几个漏洞属于配置不当引起路由暴露。
1.读取用户的认证字段获取敏感信息
 可以直接尝试访问网站目录下的/trace 路径,读取用户认证字段信息,比如在 trace 路径下,会有用户的敏感信息,可能包括 authorization(token、JWT、cookie)等字段,那么就可以利用泄露的认证信息,登陆自己的账户后,替换 JWT,token 字段继续获取其他用户的信息,这些信息足以影响其他用户,
2.数据库账户密码泄露
 Actuator作为Spring Boot提供的对应用系统的监控和管理的集成,会监控 mysql之类的数据库服务,那么通过监控信息有可能拿下 数据库;直接通过访问其/env 路径获取数据库配置信息,比如数据库的用户名及密码
3.外带明文
 直接访问/actuator/,/actuator/env这些执行器端点路径,可能会看到大量接口和敏感信息,如mysql安装路径等等,脱敏之后的password等待。
4.heapdump后台账号密码
 尝试访问网站的/actuator/heapdump接口,下载返回的GZip 压缩 堆转储文件,使用通过VisualVM/Android studio 加载,通过泄露站点的内存信息,查看到后台账号信息和数据库账号
5.git 项目地址的泄露
一般在在/health 路径,比如直接去访问项目的 health 路径,可探测到站点 git 项目地址,查看源码:
安全修复措施建议
引入 security 依赖,打开安全限制并进行身份验证;同时设置单独的 Actuator 管理端口并配置不对外网开放。
比如,Spring Boot提供了安全限制功能。比如要禁用/env接口,则可设置如下:
endpoints.env.enabled= false
最后,推荐一个Spring Boot相关漏洞学习,利用方法合集,作为黑盒安全评估指南,非常详细
Springboot之Actuator的渗透测试和漏洞利用的更多相关文章
- Shodan在渗透测试及漏洞挖掘中的一些用法
		渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易.而关于信息收集的文章网上也是有太多.今天我们来通过一些例子来讲解如何正确使用Shodan这一利器. 想要利用 ... 
- 【渗透测试】如何利用burpsuite测试无回显漏洞
		前面的文章讲了在windows和linux上的不同的无文件渗透测试的方法,那么这篇文章给大家讲解如何在漏洞没有回显的情况下,利用burpsuite自带插件进行测试的方式. 首先我们稍微提一下有哪些无回 ... 
- 详述MSSQL服务在渗透测试中的利用(上篇)
		前言: 致力于复现最实用的漏洞利用过程. 本文将带领大家学习以下内容: 学习使用`xp_cmdshell`扩展存储过程 学习调用`wscript.shell` 学习MSSQL写文件 学习沙盘模式提权 ... 
- Windows-NTFS-ADS在渗透测试中的利用
		0.什么是ADS Windows:微软公司的一款视窗操作系统,其内核为WindowsNT. NTFS:WindowsNT环境的限制级专用文件系统. ADS:NTFS的系统特性,交换数据流(Altern ... 
- 详述MySQL服务在渗透测试中的利用
		本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ... 
- pikachs 渗透测试2-XSS漏洞及利用
		一.概述 XSS(跨站脚本)概述 Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XS ... 
- 渗透测试中期--漏洞复现--MS08_067
		靶机:Win2k3 10.10.10.130 攻击机:BT5 10.10.10.128 一:nmap 查看WinK3是否开放端口3389 开放3389方法:我的电脑->属性-&g ... 
- OWASP_ZAP集成渗透测试和漏洞工具
		使用方法详见https://www.jianshu.com/p/78d7d4ad8054 
- 详述MSSQL服务在渗透测试中的利用 (下篇)
		part3 MSSQL写文件 步骤1 sp_makewebtask写文件 因为是`SA`权限,如果目标服务器是web服务器,我们也不用去备份了,可以直接写个一句话木马进去到web目录. 在不知道web ... 
随机推荐
- python在json文件中提取IP和域名
			# qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import re def openjson(path): f = open(pat ... 
- 《前端运维》三、Docker--1镜像与容器
			一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ... 
- python3 爬虫4--解析链接
			1.urlparse() 属于urllib.parse 在urlparse世界里面,一个标准的URL链接格式如下 scheme://nrtlooc/path;paramters?query#fragm ... 
- Ubuntu修改登录密码
			Ubuntu 修改用户名或密码后无法登陆 解决方法 2017年09月01日 16:48:05 lee_3312 阅读数:2192 解决方法:进入recovery-mode修改登录信息 1)重启系统 ... 
- InnoDB什么时候会锁表?
			我们常常说InnoDB是行锁,但是这里介绍一下它锁表的情况. InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的.InnoDB ... 
- springBoot 多配置文件切换之profile
			说明: 我们平时工作,有开发环境,和生产环境,利用springboot的多profile配置,可以很轻松切换配置. 实现方式1(推荐): 配置文件命名遵循:application-{开发模式}.pro ... 
- 使用 rabbitmq 的场景?
			(1)服务间异步通信 (2)顺序消费 (3)定时任务 (4)请求削峰 
- Java 中如何实现序列化,有什么意义?
			序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流 化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是为了解决对象流读写操作时可能引发的问题(如果不进 ... 
- memcached 的多线程是什么?如何使用它们?
			线程就是定律(threads rule)!在 Steven Grimm 和 Facebook 的努力下, memcached 1.2 及更高版本拥有了多线程模式.多线程模式允许 memcached 能 ... 
- 关于 DispatcherServlet.properties 文件
			1.文件位置 2.文件内容 3.文件作用 前端控制器会从 DispatcherServlet.properties 文件中加载 HandlerMapping(处理器映射器).HandlerAdapte ... 
