JNDI注入工具代码结构分析

一颗小胡椒2022-04-27 22:02:31

该文章首发于Sec-IN,文章链接:https://www.sec-in.com/article/1632

工具链接:https://github.com/Jeromeyoung/JNDIExploit-1

如下是一些模块的作用:

controllers模块:负责LDAP请求的处理

enum模块:负责存储各种模板类型名称,如:反序列化的Gadget、内存马的类型

异常模块:负责处理可能抛出的异常

反序列化模块:各种反序列化链的处理

模板模块:命令执行、回显、DNS、内存马模板

工具类模块:主要是为了方便而编写的一些工具类

协议服务及启动模块:负责LDAP、HTTP协议的具体实现

下面先对启动及协议服务模块进行说明

com.feihong.ldap.Starter类为整个工具的启动入口,从命令行接收参数传参到com.feihong.ldap.utils.Config类

Config类中的@Parameter注解为参数的说明及代表的意思,类似于py中的argparse,命令接收到参数,分别赋值给Config类的几个私有变量。

然后在之后的HTTPServer与LDAPServer中得到应用

关于LDAP服务端的编写和Demo可以参考以下链接:https://www.freebuf.com/vuls/253545.html,

HTTPServer则是正常的Java Demo编写即可

THE SPRING EQUINOX

注解的应用

在JNDIEXP中,作者为了可以反射一种类型的类,Controller类,这里的类起到了寻找特定类的作用,而且每个注解类都给定了uri属性

在LDAPServer.start()之前,会先通过new Reflections(this.getClass().getPackage().getName())的方法获取到com.feihong.ldap包下面所有LdapMapping的类,之后将其以键值对(TreeMap)放入到Map中,以便于后续调用

比如com.feihong.ldap.controllers.BasicController类,在Map中的存储格式就是(basic=>Object BasicController)

根据发送来的LDAP请求去决定调用哪个类,具体通过com.feihong.ldap.processSearchResult

根据工具运行的实际效果,如果我们的LDAP请求为ldap://192.168.85.1:1389/Basic/123

那么DN为Basic/123,首先根据DN中的开头字符串决定是哪个Controller来处理当前的LDAP的请求

THE SPRING EQUINOX

服务端动态调用类

在LDAP调用LdapController接口实现类之后(以BasicController为例),会先调用process方法,以/为标志分割,获取到相应的模块名称,比如ldap://0.0.0.0:1389/Basic/Command/whoami,那么第一部分Basic用来指定是BasicController,Command指定执行BasicController下的命令执行模块

如果是命令执行模块

通过com.feihong.ldap.utils.Util的getCmdFromBase方法获取到执行命令的内容,如果是base编码的,进行base64解码后返回内容

将其赋值给params,之后再调用BasicController的sendResult方法,如果是command模块,初始化该模块,通过asm码的方法,这里为了避免出现类名重复的情况,使用随机字符命令类名

之后命令执行模块调用cache方法

将其存储在map中,之后开始进行LDAP的步骤

首先LDAP设定好

javaClassName:记录序列化对象的类名,这样应用程序就可以确定类信息,而不必首先反序列化

javaClassNames:关于序列化对象的附加类信息。

javaCodebase:实例化工厂所需的类定义的位置(HTTP地址)

javaFactory:用于存储对象工厂的完全限定类的可选属性(即类名)

一张图说明LDAP请求的过程

接下来看HTTPServer如何接收HTTP请求并返回

当HTTPServer接收到请求之后,将Cache类中map存储的类写入到响应中,这样避免了class文件落地的情况。

版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!

ldapjndi
本作品采用《CC 协议》,转载必须注明作者和本文链接
笔者继续带大家炒Fastjson的冷饭。关于漏洞分析和利用链分析文章网上已有大量,但是关于如何自动化检测的文章还是比较少见的,尤其是如何不使用Java对Fastjson做检测。
最近这log4j热度很高。好久没写文章了,而且目前市面有些文章里面的内容信息已经有些过时缺少最新信息迭代,借此机会我剑指系列基于国内外的关于此漏洞的研究我进行了总结和归纳,并且将我自己目前发现的小众的技巧方法分享给各位,希望能给各位带来帮助不会让各位失望。
本文作者Betta,首发于火线Zone安全社区。
Apache Log4j2是一款优秀的Java日志框架,最近爆出了一个jndi注入的漏洞,影响面非常广,各大厂商都被波及。Log4j2作为日志记录的第三方库,被广泛得到使用,这次主要分享一下,最近的一些调试记录。
JNDI漏洞利用探索
2022-01-23 19:33:23
最近学习了浅蓝师傅寻找的一些JNDI漏洞的利用链受益匪浅,自己也尝试关于JNDI漏洞利用做一些挖掘,目前JN
Java命名和目录接口是Java编程语言中接口的名称( JNDI )。它是一个API(应用程序接口),与服务器一起工作,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。 可以使用命名约定从数据库获取文件。JNDI为Java⽤户提供了使⽤Java编码语⾔在Java中搜索对象的⼯具。 简单来说呢,JNDI相当与是Java里面的一个api,它可以通过命名来查找数据和对象。
0x01 前言学习一下 WebLogic JNDI 注入 RCE0x02 环境搭建和之前 WebLogic 的环境搭建是一致的,本文不再赘述。到依赖里面0x03 漏洞分析与复现漏洞影响版本与前提条件Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0。页面的用户权限,或者存在 CVE-2020-14883 未授权访问漏洞。类,从而造成 RCE。中存在 JNDI Binding 操作的处理容器,如图具体的处理逻辑在?方法,疑似存在 jndi 注入的漏洞。观察需要如何构造恶意 payload,c 是由?的逻辑并不复杂,最终会调用 JndiBindingHandle 的构造函数。如图,我们在 payload 当中的这一段被放进了构造函的?
收集内存马打入方式
2023-05-29 09:42:33
收集内存马打入方式
当杀疯了的内存马遇到河马
Log4j2 漏洞实战案例
2022-02-23 09:18:32
在现在以及未来的一段时间里,Log4j2 漏洞依然是渗透和排查的重点。在测试靶场里复现多次,在实战中遇到还是十分兴奋,So,总得记录点什么吧。
一颗小胡椒
暂无描述