JDWP无依赖攻击
字数 839 2025-08-22 12:23:36
JDWP无依赖攻击教学文档
1. JDWP协议概述
JDWP(Java Debug Wire Protocol)是Java平台调试架构(JPDA)中的核心协议,定义了调试器(debugger)和被调试的Java虚拟机(target vm)之间的通信协议。
关键特性:
- 基于TCP/IP协议
- 无固定端口,默认随机选择空闲端口
- 类似PHP的Xdebug,存在安全风险
2. JDWP服务探测
2.1 启动JDWP服务
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar spring-boot-demo-helloworld.jar
2.2 探测方法
使用nmap
nmap -sT 192.168.0.100 -p8000 -sV
使用Masscan
- 通过握手包特征字符串"JDWP-Handshake"识别
- 规则配置文件:jdwp-masscan.cfg
Python探测脚本
import socket
client = socket.socket()
client.connect(("192.168.0.100", 8000))
client.send("JDWP-Handshake")
if client.recv(14) == "JDWP-Handshake":
print "[*] Detected JDWP service"
client.close()
3. 漏洞利用方法
3.1 jdwp-shellifier工具
- 项目地址:jdwp-shellifier
- 原理:通过编写JDI(JDWP客户端),使用断点方式获取线程上下文从而调用方法执行命令
- 优点:轻量,容易集成到扫描器中
- 缺点:需要猜测调用方法并等待触发断点
3.2 Metasploit模块
- 模块路径:
exploits/multi/misc/java_jdwp_debugger.rb - 原理:直接查找sleeping线程,下发单步指令实现断点
- 优点:更通用,无需猜测方法
- 缺点:依赖Metasploit框架,上传的payload容易被发现
3.3 使用jdb工具
- jdb是随JDK安装的Java调试器
- 利用步骤:
- 远程attach调试:
jdb -attach 192.168.0.100:8000 - 查看所有线程:
threads - 选择sleeping线程:
thread <线程id> - 执行命令:
print/dump/eval <java表达式>
- 远程attach调试:
3.4 自实现EXP
- 改进版项目地址:Lz1y/jdwp-shellifier
- 改进点:实时反馈,无需等待断点触发
4. 防御措施
- 禁用JDWP:生产环境不应开启调试端口
- 网络隔离:如必须使用,限制访问IP
- 端口安全:避免使用默认或常见端口
- 监控告警:对异常调试连接进行监控