jmap和jcmd在渗透中的利用方式
jmap和jcmd在渗透中的利用方式
一、jmap和jcmd的简介
jmap
和 jcmd
是 Java 开发工具包(JDK)中提供的两个命令行工具,用于与 Java 虚拟机(JVM)进行交互、诊断和监控。
jmap
jmap
是一个用于生成堆转储文件和查看堆内存使用情况的工具。它的主要功能包括:
- 生成堆转储文件:可以使用
jmap
命令生成 Java 进程的堆转储文件,用于分析 Java 应用程序的内存使用情况和排查内存泄漏问题。 - 查看堆内存使用情况:可以使用
jmap
命令查看 Java 进程的堆内存使用情况,包括堆大小、已使用内存、空闲内存等信息。
jcmd
jcmd
是一个用于向正在运行的 Java 进程发送诊断命令的工具。它的主要功能包括:
- 列出 Java 进程:可以使用
jcmd
命令列出目标系统上正在运行的 Java 进程的进程 ID(PID)以及它们的主要参数和状态信息。 - 执行诊断命令:可以向 Java 进程发送诊断命令,比如生成线程转储信息、执行垃圾回收、查看系统属性、检查 JVM 参数等。
二、渗透中jmap和jcmd的利用方式
1、利用jmap获取敏感信息
既然jmap
可以生成堆转储文件,那么就不难想到通过jmap
将Java
进程的堆转储文件生成出来,再结合工具分析heapdump
文件,里面就有可能泄露出数据库连接信息(用户名,密码,地址等),如果项目中使用了AK SK
甚至AK
和SK
都可能泄露,从而实现接管整个云。
jmap
生成堆转储文件的命令很简单:
1
jmap -dump:file=./heapdump [pid]
这边随便启动个项目测试,端口8080
:
查看一下Java
的PID
:
生成堆转储文件:
通过JDumpSpider
这个工具可以快速的分析heapdump
文件:
因为这个例子使用了高版本的Shiro
,所以也会泄露出Shiro
的Key
和加密模式,所以当渗透时候如果服务器存在多个Java
项目我们通过其他口子获取到Shell
且恰好还有个高版本Shiro
的服务,可通过这样的方式拿到Key
,作为权限维持的另一个“口子“。
2、利用jcmd获取Java进程信息
列出 Java 进程:
jcmd
生成堆转储文件
三、补充
本文由作者按照 CC BY 4.0 进行授权