某开源商城后台反序列化漏洞挖掘和利用
字数 1418 2025-08-22 12:23:30
开源商城后台Fastjson反序列化漏洞分析与利用
漏洞概述
本文详细分析了一个开源商城后台系统中存在的Fastjson反序列化漏洞,该漏洞位于Manager-Api模块的cn.lili.controller.setting.RegionManagerController#synchronizationData方法中。攻击者可以通过构造恶意请求实现远程代码执行(RCE)。
漏洞分析
漏洞位置
漏洞存在于RegionManagerController类的synchronizationData方法中,该方法用于同步高德行政地区数据。
漏洞触发流程
-
可控参数传入:
- 方法接收一个String类型的参数
url - 该参数完全可控,由前端传入
- 方法接收一个String类型的参数
-
HTTP请求执行:
String jsonString = HttpClientUtils.doGet(url);- 调用
HttpClientUtils.doGet方法执行传入的URL - 在
doGet方法中(174行),使用Apache HttpClient执行请求 - 检查响应状态码是否为200,如果是则提取响应内容并返回
- 调用
-
危险的反序列化操作:
this.initData(jsonString);- 将获取的JSON字符串传递给
initData方法 - 在
initData方法中使用JSONObject.parseObject进行反序列化
- 将获取的JSON字符串传递给
漏洞成因
-
Fastjson版本问题:
- 项目中使用的Fastjson版本为1.2.78
- 该版本存在已知的反序列化漏洞
-
Groovy依赖存在:
- 项目中同时存在Groovy依赖
- 可利用公开的Fastjson+Groovy利用链实现RCE
漏洞复现
复现思路
- 控制返回数据包的内容为Fastjson可执行的格式
- 由于传入的URL可控,只需确保解析URL后返回的数据包内容符合要求
复现步骤
-
准备恶意服务器:
- 使用Python开启HTTP服务
- 创建包含Fastjson可执行内容的文件
# 示例文件内容 { "@type": "org.codehaus.groovy.control.ProcessingUnit", // 恶意payload } -
发送恶意请求:
- 构造请求,将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