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调试器
  • 利用步骤:
    1. 远程attach调试:
      jdb -attach 192.168.0.100:8000
      
    2. 查看所有线程:
      threads
      
    3. 选择sleeping线程:
      thread <线程id>
      
    4. 执行命令:
      print/dump/eval <java表达式>
      

3.4 自实现EXP

4. 防御措施

  1. 禁用JDWP:生产环境不应开启调试端口
  2. 网络隔离:如必须使用,限制访问IP
  3. 端口安全:避免使用默认或常见端口
  4. 监控告警:对异常调试连接进行监控

5. 参考资源

  1. JDWP协议规范
  2. JPDA架构
  3. IBM开发者文档
  4. IOActive技术分析
JDWP无依赖攻击教学文档 1. JDWP协议概述 JDWP(Java Debug Wire Protocol)是Java平台调试架构(JPDA)中的核心协议,定义了调试器(debugger)和被调试的Java虚拟机(target vm)之间的通信协议。 关键特性: 基于TCP/IP协议 无固定端口,默认随机选择空闲端口 类似PHP的Xdebug,存在安全风险 2. JDWP服务探测 2.1 启动JDWP服务 2.2 探测方法 使用nmap 使用Masscan 通过握手包特征字符串"JDWP-Handshake"识别 规则配置文件: jdwp-masscan.cfg Python探测脚本 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调试: 查看所有线程: 选择sleeping线程: 执行命令: 3.4 自实现EXP 改进版项目地址: Lz1y/jdwp-shellifier 改进点:实时反馈,无需等待断点触发 4. 防御措施 禁用JDWP :生产环境不应开启调试端口 网络隔离 :如必须使用,限制访问IP 端口安全 :避免使用默认或常见端口 监控告警 :对异常调试连接进行监控 5. 参考资源 JDWP协议规范 JPDA架构 IBM开发者文档 IOActive技术分析