目录
[0x00 前言](#0x00 前言)
[0x01 Actuator 泄露及利用](#0x01 Actuator 泄露及利用)
[1、Actuator heapdump 内存泄露](#1、Actuator heapdump 内存泄露)
[3、如何发现 Actuator 泄露(白盒/黑盒)](#3、如何发现 Actuator 泄露(白盒/黑盒))
[0x02 Swagger自动化测试](#0x02 Swagger自动化测试)
[2、Postman+BurpSuite+Xray 联动](#2、Postman+BurpSuite+Xray 联动)
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"