Actuator内存泄露及利用&Swagger未授权&自动化测试实现

目录

[0x00 前言](#0x00 前言)

[0x01 Actuator 泄露及利用](#0x01 Actuator 泄露及利用)

[1、Actuator heapdump 内存泄露](#1、Actuator heapdump 内存泄露)

2、知道泄露后如何进一步利用

[3、如何发现 Actuator 泄露(白盒/黑盒)](#3、如何发现 Actuator 泄露(白盒/黑盒))

[0x02 Swagger自动化测试](#0x02 Swagger自动化测试)

1、什么是Swagger?

[2、Postman+BurpSuite+Xray 联动](#2、Postman+BurpSuite+Xray 联动)

3、思考


0x00 前言

希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!

个人博客链接:CH4SER的个人BLOG -- Welcome To Ch4ser's Blog

0x01 Actuator 泄露及利用

1、Actuator heapdump 内存泄露

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

JavaSec 靶场介绍:本项目使用JAVA "1.8.0_112" 基于Spring boot + layuimini 进行开发实现

点击访问后可以看到 Actuator 页面:

Actuator 页面是一个用于监控和管理 Spring Boot 应用程序的页面。它提供了一系列的端点(endpoints),这些端点可以用于获取应用程序的健康状况、性能指标、运行时信息等。

通过访问 Actuator 页面,可以方便地查看应用程序的运行状态和性能情况,从而帮助开发者监控和调试应用程序。Actuator 页面可以通过浏览器访问,一般默认路径是 "/actuator"。

接着访问 env 端点,看到了环境变量配置信息,如数据库密码,但是显示为 * 号,这时就要下载 heapdump 文件分析:

env 是一个用于查看应用程序的环境变量的端点(Endpoint),通过访问/actuator/env端点,可以获取应用程序当前运行环境的所有环境变量信息。

在开发和调试过程中,查看env端点可以帮助开发人员了解应用程序运行时的环境变量配置情况,方便进行问题排查和调优。

但是如果因为配置不当将 env 端点暴露,可能会造成敏感信息泄露的问题。

访问 heapdump 端点,下载 heapdump 文件并使用工具分析:

heapdump 是一个用于生成Java堆转储文件的端点(Endpoint),通过访问/actuator/heapdump端点,可以下载当前Java应用程序的堆转储文件。

通俗的讲,heapdump 文件就是当前项目的内存文件,通过特定工具分析能够造成内存泄露的问题。

使用工具 heapdump_tool.jar 分析如下:

java -jar .\heapdump_tool.jar .\heapdump

推荐选择模式 1,也就是全局模式,然后输入要找的关键字(有提示的模板,比如 password、shirokey 等),这里分析出了我的数据库连接密码。

用其他工具也行,比如 JDumpSpider-1.1-SNAPSHOT-full.jar,这款工具是直接将分析结果全部呈现出来,但是听说有些分析不出来

java -jar .\JDumpSpider-1.1-SNAPSHOT-full.jar .\heapdump
2、知道泄露后如何进一步利用

工具 SpringBootExploit-1.3-SNAPSHOT-all.jar:该工具首先检测有无 heapdump 泄露,然后根据泄露的信息(如项目所加载的类)判断有无其他漏洞(JNDI 注入导致的 RCE)利用的可能

如下,点击检测环境后,日志显示存在 jolokia logback JNDI RCE 漏洞

既然是 JNDI 注入,那么我们就要配置服务器地址(也就是远程恶意类存放的地址),这里用配套的工具:JNDIExploit-1.3-SNAPSHOT.jar,具体使用如下:

java -jar .\JNDIExploit-1.3-SNAPSHOT.jar -i 127.0.0.1 -l 1389 -p 3456
-i:服务器绑定的IP地址
-l:LDAP监听端口
-p:HTTP监听端口

然后回到工具 SpringBootExploit-1.3-SNAPSHOT-all.jar 这边,点击连接看能否连上,看到连接成功

选择 jolokia logback JNDI RCE 利用链并检测,日志显示漏洞利用失败,按理来说应该显示植入冰蝎内存马成功,怀疑是 JDK 版本问题,但是换了 8u112 也不行。

但是很奇怪的是工具 JNDIExploit-1.3-SNAPSHOT.jar 这边显示成功植入了内存马

最后尝试将 PhpStudy 的 WAMP 全部开启成功植入(错误原因之前我只开启了 MySQL)

使用冰蝎 4.0 连接成功(冰蝎 3.0 不行),jolokia logback JNDI RCE 复现完毕。

3、如何发现 Actuator 泄露(盒/黑盒)

对于白盒审计有无 Actuator 泄露:(以下两个条件都要成立)

  • 看 pom.xml 或 External Libraries 里有没有用到 Actuator 组件

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
  • 看 application.properties 里有没有设置全部暴露 Actuator

    management.endpoints.web.exposure.include=*

对于黑盒发现 Actuator 泄露:

首先要找到 SpringBoot 框架的网站,可以通过 Fofa 语法:body="Whitelabel Error Page" && icon_hash="116323821",即根据报错页面和图标 hash匹配

然后使用 BurpSuite 插件APIKit 测试有无 Actuator 泄露:该插件支持多种 API 接口的指纹识别,其中就包括 Actuator,并且所有 BurpSuite 的流量都会经过该插件

首先将 APIKit.jar 导入到 BurpSuite:

然后开启 BurpSuite 代理,鼠标点点点就行了,流量会自动经过 APIKit,可以看到已经检测到了 Atuator 泄露

0x02 Swagger自动化测试

1、什么是Swagger?

Swagger是一个用于生成、描述和调用 RESTful 接口的 Web 服务,Swagger 能将项目中所有设置暴露的接口展现在页面上。简而言之,Swagger就是一个方便开发人员进行接口开发和测试的工具。

基于安全的角度,可以利用 Swagger 针对接口进行漏洞测试,但接口数量往往是很多的,所以我们一般会采用自动化接口漏洞安全测试。

2、Postman+BurpSuite+Xray 联动

首先进入靶场(炼石计划 RefiningStone)的 Swagger 页面 swagger-ui.html,观察到有许多接口的测试点,而对于自动化联动测试更重要的是图中标红的 API 文档地址,等会需要填到 Postman 里

接着打开 Postman,粘贴 API 文档的链接地址,然后 Continue - Import 即可导入

按照图示操作 Run 就行了,建议勾选上 Save Responses 保存响应

Run 之后可能会报错,大概率是上个界面的 Variables 变量设置有问题,多了两个 // 号,去掉然后保存重新 Run 即可

Postman 自动化测试结果如下,但很奇怪的是返回码竟然都是 200,按理来说 Postman 是没有登录状态的,应该有很多 500 才对

现在考虑把 Postman 的流量转到 BurpSuite 上去,也就是说要在 Postman 里设置走 BurpSuite 代理,我的 BurpSuite 代理默认是本地 8080 端口,所以在 Postman 按照如下设置即可

在 Postman 那边重新 Run 之后,可以看到 BurpSuite - Proxy - HTTP History 里已经接收到了流量

现在考虑再将 BurpSuite 的流量转发到本地某个端口上去(这里我设置的 7777),具体设置是在 Settings - Network - Connections 里,然后让 Xray 监听 7777 端口并漏扫

BurpSuite + Xray 联动参考:Xray+burp联动使用(被动扫描)_xray被动扫描_小小丸子551的博客-CSDN博客

常用操作命令:

1、使用基础爬虫爬取并扫描整个网站
.\xray_windows_amd64.exe webscan --basic-crawler http://wordy/ --html-output proxy.html

2、windows xray版单个url检测
.\xray_windows_amd64.exe webscan --url "http://example.com/?a=b"

3、使用http代理发起被动扫描
.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output test.html

4、指定扫描
.\xray_windows_amd64.exe webscan --plugins cmd_injection,sqldet --url http://test.com
.\xray_windows_amd64.exe webscan --plugins cmd_injection,sqldet --proxy 127.0.0.1:8888

这里肯定是使用被动扫描,命令如下:

.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output test.html

然后重新在 Postman 那边 Run 一下,Xray 就能进行漏扫了,如此一来实现了 Postman+BurpSuite+Xray 的联动

3、思考

观察到 Postman 流量的 User-Agent 带有很明显的 Postman 特征,这明显是不合理的,后期我会把这个坑给填上

FOFA 语法:app="Swagger" && country="CN"

相关推荐
aloha_7893 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
2401_857622666 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
力姆泰克6 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
BPM_宏天低代码6 小时前
低代码 BPA:简化业务流程自动化的新趋势
运维·低代码·自动化
阑梦清川8 小时前
JavaEE进阶---第一个SprintBoot项目创建过程&&&我的感受
java·java-ee·springboot
IT-民工211108 小时前
CI/CD 实践总结
运维·ci/cd·自动化
A-bodgie9 小时前
Spring 中的 Environment 对象
java·后端·spring·servlet·springboot
小趴菜不能喝10 小时前
spring boot 3.x 整合Swagger3
java·spring boot·swagger
_.Switch10 小时前
Serverless架构与自动化运维
运维·python·缓存·自动化·运维开发
孤蓬&听雨11 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息