某开源商城后台反序列化漏洞挖掘和利用
字数 1418 2025-08-22 12:23:30

开源商城后台Fastjson反序列化漏洞分析与利用

漏洞概述

本文详细分析了一个开源商城后台系统中存在的Fastjson反序列化漏洞,该漏洞位于Manager-Api模块的cn.lili.controller.setting.RegionManagerController#synchronizationData方法中。攻击者可以通过构造恶意请求实现远程代码执行(RCE)。

漏洞分析

漏洞位置

漏洞存在于RegionManagerController类的synchronizationData方法中,该方法用于同步高德行政地区数据。

漏洞触发流程

  1. 可控参数传入

    • 方法接收一个String类型的参数url
    • 该参数完全可控,由前端传入
  2. HTTP请求执行

    String jsonString = HttpClientUtils.doGet(url);
    
    • 调用HttpClientUtils.doGet方法执行传入的URL
    • doGet方法中(174行),使用Apache HttpClient执行请求
    • 检查响应状态码是否为200,如果是则提取响应内容并返回
  3. 危险的反序列化操作

    this.initData(jsonString);
    
    • 将获取的JSON字符串传递给initData方法
    • initData方法中使用JSONObject.parseObject进行反序列化

漏洞成因

  1. Fastjson版本问题

    • 项目中使用的Fastjson版本为1.2.78
    • 该版本存在已知的反序列化漏洞
  2. Groovy依赖存在

    • 项目中同时存在Groovy依赖
    • 可利用公开的Fastjson+Groovy利用链实现RCE

漏洞复现

复现思路

  1. 控制返回数据包的内容为Fastjson可执行的格式
  2. 由于传入的URL可控,只需确保解析URL后返回的数据包内容符合要求

复现步骤

  1. 准备恶意服务器

    • 使用Python开启HTTP服务
    • 创建包含Fastjson可执行内容的文件
    # 示例文件内容
    {
      "@type": "org.codehaus.groovy.control.ProcessingUnit",
      // 恶意payload
    }
    
  2. 发送恶意请求

    • 构造请求,将URL参数指向恶意服务器上的文件
    • 系统会获取该文件内容并进行反序列化
  3. 验证漏洞

    • 观察DNSlog是否收到请求
    • 确认命令执行是否成功

漏洞利用

利用链组成

Fastjson 1.2.78 + Groovy利用链

利用链模板

参考GitHub项目:fastjsonVul

利用过程

  1. 第一次反序列化

    • org.codehaus.groovy.control.ProcessingUnit加入白名单
  2. 第二次反序列化

    • 加载自定义的恶意类
  3. 恶意类构造

    • 修改GrabAnnotationTransformation2
    • 在其中加入加载自定义Filter的代码

利用效果

  1. 命令执行

    • 成功实现命令回显
    • 可执行任意系统命令
  2. 后门连接

    • 成功连接冰蝎(Behinder)等Webshell管理工具
    • 获取持久化访问权限

修复建议

  1. 升级Fastjson

    • 升级到最新安全版本(至少2.x以上)
    • 或使用安全模式配置
  2. 输入验证

    • 对传入的URL参数进行严格校验
    • 限制只能访问可信域名
  3. 安全配置

    • 启用Fastjson的安全模式
    • 配置反序列化白名单
  4. 移除不必要依赖

    • 如果不需要Groovy功能,移除相关依赖

参考资源

  1. Fastjson漏洞利用技巧集合:
    https://github.com/safe6Sec/Fastjson

  2. Fastjson+Groovy利用链:
    https://github.com/Lonely-night/fastjsonVul

开源商城后台Fastjson反序列化漏洞分析与利用 漏洞概述 本文详细分析了一个开源商城后台系统中存在的Fastjson反序列化漏洞,该漏洞位于Manager-Api模块的 cn.lili.controller.setting.RegionManagerController#synchronizationData 方法中。攻击者可以通过构造恶意请求实现远程代码执行(RCE)。 漏洞分析 漏洞位置 漏洞存在于 RegionManagerController 类的 synchronizationData 方法中,该方法用于同步高德行政地区数据。 漏洞触发流程 可控参数传入 : 方法接收一个String类型的参数 url 该参数完全可控,由前端传入 HTTP请求执行 : 调用 HttpClientUtils.doGet 方法执行传入的URL 在 doGet 方法中(174行),使用Apache HttpClient执行请求 检查响应状态码是否为200,如果是则提取响应内容并返回 危险的反序列化操作 : 将获取的JSON字符串传递给 initData 方法 在 initData 方法中使用 JSONObject.parseObject 进行反序列化 漏洞成因 Fastjson版本问题 : 项目中使用的Fastjson版本为1.2.78 该版本存在已知的反序列化漏洞 Groovy依赖存在 : 项目中同时存在Groovy依赖 可利用公开的Fastjson+Groovy利用链实现RCE 漏洞复现 复现思路 控制返回数据包的内容为Fastjson可执行的格式 由于传入的URL可控,只需确保解析URL后返回的数据包内容符合要求 复现步骤 准备恶意服务器 : 使用Python开启HTTP服务 创建包含Fastjson可执行内容的文件 发送恶意请求 : 构造请求,将URL参数指向恶意服务器上的文件 系统会获取该文件内容并进行反序列化 验证漏洞 : 观察DNSlog是否收到请求 确认命令执行是否成功 漏洞利用 利用链组成 Fastjson 1.2.78 + Groovy利用链 利用链模板 参考GitHub项目: fastjsonVul 利用过程 第一次反序列化 : 将 org.codehaus.groovy.control.ProcessingUnit 加入白名单 第二次反序列化 : 加载自定义的恶意类 恶意类构造 : 修改 GrabAnnotationTransformation2 类 在其中加入加载自定义Filter的代码 利用效果 命令执行 : 成功实现命令回显 可执行任意系统命令 后门连接 : 成功连接冰蝎(Behinder)等Webshell管理工具 获取持久化访问权限 修复建议 升级Fastjson : 升级到最新安全版本(至少2.x以上) 或使用安全模式配置 输入验证 : 对传入的URL参数进行严格校验 限制只能访问可信域名 安全配置 : 启用Fastjson的安全模式 配置反序列化白名单 移除不必要依赖 : 如果不需要Groovy功能,移除相关依赖 参考资源 Fastjson漏洞利用技巧集合: https://github.com/safe6Sec/Fastjson Fastjson+Groovy利用链: https://github.com/Lonely-night/fastjsonVul