java agentlib jdwp,JDWP无依赖攻击
JDWPJDWP 是 Java Debug Wire Protocol 的缩写,在JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。与PHP的 Xdebug 类似,当其调试端口直接开放在公网上时,很容易被攻击者攻击并且获取系统权限。Useful link:探测 J
JDWP
JDWP 是 Java Debug Wire Protocol 的缩写,在JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。
与PHP的 Xdebug 类似,当其调试端口直接开放在公网上时,很容易被攻击者攻击并且获取系统权限。
Useful link:
探测 JDWP 服务
JDWP并无固定的端口,当未指定调试端口时,则会随机指定一个空闲端口。
启动JDWP参数:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar spring-boot-demo-helloworld.jar
nmap
nmap -sT 192.168.0.100 -p8000 -sV
测试了一下,并不是特别的精准,需要扫描多次。
Masscan
默认为扫全球,并且限定了端口,请自行修改。
自实现
demo(python2):
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()
漏洞利用
jdwp-shellifier
优点: 轻量,容易集成到扫描器中
缺点: 使用下断点的方式执行命令,需要猜测调用的方法,并且需要等待直到触发击中断点。
msf
与jdwp-shellifier不同,这个exp的作者想到了更为直接的办法:直接去sleeping的线程,下发单步指令,然后就可以断下来了...具体原理我也没有太弄清楚。
优点: 更为通用,不用猜测调用方法以及等待
缺点: 依赖metasploit框架,直接上传msf木马而不是执行命令,容易被发现。
jdb
java debugger,随JDK安装。
远程attach调试:
jdb -attach 192.168.0.100:8000
利用方式, 这里直接使用msf中exp的姿势:
attach远程地址
threads命令查看所有线程,查找sleeping的线程
thread 线程id命令
通过(print|dump|eval)命令,执行java表达式,从而达成命令执行
优点: 非常直接,简单的利用
缺点: 不容易集成
自实现EXP
通过学习以上几种利用方式,通过抓包分析、学习协议,结合jdwp-shellifier中实现的JDWP-CLIENT,非常容易重现msf的exp,实现轻量方便的利用。
项目地址:
https://github.com/Lz1y/jdwp-shellifier
可以发现原版脚本执行,断点一旦没有猜中,给我们的就是无尽的等待,修改后的脚本则可以实时的得到反馈。
文末
此文章主要还是利用层面占比较重。在原理方面,文中的链接已经说明非常清晰了,没有必要在复述一遍。
更多推荐
所有评论(0)