免费发布信息
当前位置:APP交易 > 热点资讯 > app交易 >  JDWP无依赖攻击

JDWP无依赖攻击

发表时间:2021-07-09 17:11:27  来源:红帽社区  浏览:次   【】【】【
红帽社区是一个垂直网络安全社区,融合“红帽先锋”正能量精神,每日分享最新安全资讯,提供安全问答、靶场、众测、漏洞库等功能,是网络安全爱好者学习、交流的优质社区。

JDWP

JDWP 是 Java Debug Wire Protocol 的缩写,在JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。

与PHP的 Xdebug 类似,当其调试端口直接开放在公网上时,很容易被攻击者攻击并且获取系统权限。

Useful :

JDWP:https://docs.oracle.com/en/java/javase/11/docs/specs/jdwp/jdwp-protocol.html
JDPA:https://docs.oracle.com/en/java/javase/11/docs/specs/jpda/architecture.html

具体协议标准请参照:
https://www.ibm.com/developerworks/cn/java/j-lo-jpda1/index.html?ca=drs-

探测 JDWP 服务

JDWP并无固定的端口,当未指定调试端口时,则会随机指定一个空闲端口。

启动JDWP参数:
java -agentlib:jdwp=transport=dt_socketserver=ysuspend=naddress=8000 -jar spring-boot-demo-helloworld.jar

nmap

nmap -sT 192.168.0.100 -p8000 -sV
测试了一下,并不是特别的精准,需要扫描多次。

Masscan

通过握手包特征字符串 JDWP-Handshake ,可以使Masscan识别特定服务。
规则配置文件:
https://github.com/IOActive/jdwp-shellifier/blob/master/jdwp-masscan.cfg

默认为扫全球,并且限定了端口,请自行修改。

自实现

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

项目地址:
https://github.com/IOActive/jdwp-shellifier

作者通过编写了一个JDI(JDWP客户端),通过下断点的方式,获得线程上下文从而调用方法执行命令。
具体实现:http://blog.ioactive.com/2014/04/hacking-java-debug-wire-protocol-or-how.html

优点: 轻量,容易集成到扫描器中
缺点: 使用下断点的方式执行命令,需要猜测调用的方法,并且需要等待直到触发击中断点。

msf

项目地址:
https://github.com/rapid7/sploit-work/blob/master/modules/exploits/multi/misc/java_jdwp_debugger.rb

与jdwp-shellifier不同,这个exp的作者想到了更为直接的办法:直接去sleeping的线程,下发单步指令,然后就可以断下来了...具体原理我也没有太弄清楚。

优点: 更为通用,不用猜测调用方法以及等待
缺点: 依赖sploit框架,直接上传msf木马而不是执行命令,容易被发现。

jdb

java debugger,随JDK安装。
远程attach调试:
jdb -attach 192.168.0.100:8000

利用方式 这里直接使用msf中exp的姿势:

  1. attach远程地址
  2. threads命令查看所有线程,查找sleeping的线程
  3. thread 线程id命令
  4. 通过(print|dump|eval)命令,执行java表达式,从而达成命令执行

优点: 非常直接,简单的利用
缺点: 不容易集成

自实现EXP

通过学习以上几种利用方式,通过抓包分析、学习协议,结合jdwp-shellifier中实现的JDWP-CLIENT,非常容易重现msf的exp,实现轻量方便的利用。
项目地址:
https://github.com/Lz1y/jdwp-shellifier

可以发现原版脚本执行,断点一旦没有猜中,给我们的就是无尽的等待,修改后的脚本则可以实时的得到反馈。

文末

此文章主要还是利用层面占比较重。在原理方面,文中的链接已经说明非常清晰了,没有必要在复述一遍。


责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。

德品

1377 678 6470