【渗透日记】最近的两个Spring Actuator导致的后台管理员权限丢失及支付系统账号劫持

Mangofang 发布于 2026-03-15 178 次阅读


使用的软件:

  1. BurpSuite
  2. APIKit(BurpSuite插件)

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!


1、什么是Actuator

ActuatorSpring boot的一个模块,提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助监控和管理Spring Boot 应用。

这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。因为暴露内部信息的特性,所以如果配置不当,易造成信息泄露问题

Spring Boot 提供了所谓的Endpoints(下文翻译为端点)给外部来与应用程序进行访问和交互。

部分端点如下:

HTTP 方法Endpoint(端点)描述
GET/actuator端点发现:列出当前应用中所有可用的 Actuator 端点。
GET/actuator/auditevent审计事件:查看审计日志(如认证登录、订单失败等)。通常需配合 Spring Security 使用。
GET/actuator/beansBean 信息:展示当前应用上下文中所有的 Spring Bean 及其依赖关系。
GET/actuator/conditions自动配置报告:列出自动配置类中匹配成功(PositiveMatches)和失败(NegativeMatches)的条件详情。
GET/actuator/configprops配置属性:显示所有带有 @ConfigurationProperties 注解的配置项及其当前值(含默认值)。
GET/actuator/env环境属性:查看 Spring Boot 加载的所有环境配置及值。:敏感信息(如 key、password、secret)会自动脱敏
GET/actuator/flyway数据库迁移:查看 Flyway 数据库迁移详情(需引入 Flyway 依赖)。
GET/actuator/health健康检查:查看应用运行健康状态。数据由 HealthIndicator 实现类提供,支持自定义健康指标。
GET/actuator/heapdump堆转储:生成并下载当前 JVM 的 Heap Dump 文件,用于内存泄漏分析。
GET/actuator/info应用信息:展示自定义的应用元数据(配置中以 info 开头的属性),常用于显示版本号、描述等。
GET/actuator/mappings请求映射:展示所有请求映射路径,包括 Actuator 端点及 MVC Controller 的映射关系。
GET/actuator/metrics监控指标:列出可用监控指标(如 JVM 内存、CPU 使用率)。访问 /actuator/metrics/{name} 可查看具体指标详情。
GET/actuator/scheduledtasks定时任务:查看应用中所有定时任务(Scheduled Tasks)的执行详情。
POST/actuator/shutdown优雅关闭:关闭当前 Spring Boot 应用。:唯一需要 POST 请求的端点,默认禁用,需手动配置开启。

端点在生产环境中通常不会直接暴露(也有极少一部分是直接暴露的),通常会通过路径屏蔽密码验证等方式对端点进行保护。

如果是路径屏蔽,我们可以使用常规的403Bypass尝试进行绕过

例如在如下这个例子中,我们无法通过直接访问/actuator来访问端点,返回404

但是可以通过分号绕过+URL编码方式进行bypass,actuator进行编码后是%61%63%74%75%61%74%6f%72

构造访问路径:/visitor/..;/%61%63%74%75%61%74%6f%72

成功bypass

2、端点利用

下面列出一些敏感端点

HTTP 方法Endpoint描述
GET/actuator/heapdump堆转储:下载 JVM 堆内存快照,可能包含数据库密码、Session、JWT 密钥等敏感数据
GET/actuator/env环境属性:查看所有配置项及值,可能泄露 spring.datasource.passwordjwt.secret 等敏感配置。
GET/actuator/configprops配置属性:显示 @ConfigurationProperties 配置值,可能暴露敏感字段,常与 env 端点配合利用。
GET/actuator/httptrace
/actuator/httpexchanges
HTTP 追踪:记录近期请求/响应详情,可能泄露 Cookie、Authorization Header、用户参数等。
GET/actuator/mappings请求映射:列出所有 URL 路由,可发现未公开的内部接口或管理端点。
GET/actuator/nacos-configNacos 配置:获取配置中心内容,可能泄露所有微服务的数据库密码、RPC 密钥等。

其中env、configprops、nacos等端点会存在密码、连接字符串等敏感信息,但都会被*脱敏显示

可尝试通过/actuator/heapdump端点下载转储文件,使用JDumpSpider或其他解析工具解析处结果,通过heapdump解析的数据多为明文显示

不过env、heapdump这些泄露的redis、sql、nacos等大多存在于目标内网,不直接暴露在公网上开放访问,如果在内网环境下,利用价值将大大上升。

但是httptrace这个端点在公网环境中还是有实际利用价值的,通常httptrace在记录请求时会记录http headers,如果一个已登录的用户请求被记录,那我们就可以通过httptrace端点获取他的凭证

3、案例一:httptrace泄露到后台管理员权限

上来一个登录框,扫了备份文件、目录、中间件,都没啥结果。前端出了个登录也就没别的按钮了,通过findsomethink提取一手api测试一下,结果都是需要鉴权,也没啥结果。

想着能不能看看别的资产先,就去微信搜了一下目标主体的名称,看看能不能找到一些小程序或者是公众号跳转到Web资产,结果发现一个小程序。小程序打开和刚刚看到的Web主题是一致的,推测应该是同一个后端,不同前端,抓包看了一下,果然都是同一个域名。但是小程序的前端多了一个“访客登记入口”

尝试访问一下这个功能点,实际上也没别的功能点可以看了。

看了一圈,SQL、文件上传...也没啥问题。转手看了一眼APIKit(BurpSuite插件),发现有两个Spring Acutator的泄露

注:APIKit是BurpSuite插件,用于对API文档泄露进行自动测试,同时也会自动进行403Bypass测试

APIKit Github:API-Security/APIKit: APIKit:Discovery, Scan and Audit APIs Toolkit All In One.

接下来就是本篇文章上半部分介绍到的内容了,env端点是脱敏内容同时该系统未开启heapdump端点,也不满足其他解密条件。这边直接看httptrace,不出所料拿到了一个用户权限的JWT

立马想到了前面需要鉴权的API,把这个JWT带入到Header中去请求此前提取的API,看看能不能通过鉴权,好在这个JWT还没有过期也没有被注销。通过对API的遍历找到一个敏感API:user-list 通过这个接口可以直接拿到所有用户的信息,其中包括password(这里其实是一个垂直越权,后续测试这里请求的JWT实际上是一个普通用户权限,并且该系统大部分接口均存在垂直越权,这里就不展开说了,以后有机会的话:)

这个admin账号由于强口令,没办法直接通过彩虹表解密md5,但是好在后续还有其他特权账号是弱口令的,通过cmd5查询到弱口令密码成功登录,并通过特权账号提权至Admin超管用户

4、案例二:httptrace到支付账号劫持

这个就没啥好说的了,无非是重复一遍此前的操作,我就简单概述一下,也是通过APIKit扫到了Actuator端点的泄露,存在httptrace端点。通过httptrace端点获取JWT,然后将JWT设置进Header访问主页,进行账号劫持

同时也可以直接生成支付码

此作者没有提供个人介绍。
最后更新于 2026-03-15