什么是JDWP
JDWP(Java DEbugger Wire Protocol):即Java调试线协议,是一个为Java调试而设计的通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。说白了就是JVM或者类JVM的虚拟机都支持一种协议,通过该协议,Debugger 端可以和 target VM 通信,可以获取目标 VM的包括类、对象、线程等信息,在调试Android应用程序这一场景中,Debugger一般是指你的 develop machine 的某一支持 JDWP协议的工具例如 Android Studio 或者 JDB,而 Target JVM是指运行在你mobile设备当中的各个App(因为它们都是一个个虚拟机 Dalvik 或者 ART),JDWP Agent一般负责监听某一个端口,当有 Debugger向这一个端口发起请求的时候,Agent 就转发该请求给 target JVM并最终由该 JVM 来处理请求,并把 reply 信息返回给 Debugger 端。
JDWP协议
jdwp(Java Debug Wire Protocol)协议通信之前需要先握手,即客户端( Debugger)先发送一个14个字符的ASCII字符串:“JDWP-Handshake”,然后服务端(Debuggee )返回同样的字符串,即可完成握手。
漏洞验证
telnet端口后,输入命令JDWP-Handshake,
如果返回JDWP-Handshake,证明存在漏洞。而且如果输入JDWP-Handshake的速度不够快的话,连接很快就会断开。
[1]https://ioactive.com/hacking-java-debug-wire-protocol-or-how/
[2]https://paper.seebug.org/933/#jdwp