skills/code-audit/php/php-serialization-audit/SKILL.md
PHP 源码序列化与模板类漏洞审计。当在 PHP 白盒审计中需要检测反序列化、XML 解析或模板注入漏洞时触发。 覆盖 3 类风险: PHP 反序列化(unserialize/phar 反序列化/POP 链构造)、 XXE(XML 外部实体注入/libxml 配置)、SSTI(模板注入/Twig/Blade/Smarty 引擎)。 需要 php-audit-pipeline 提供的数据流证据。
npx skillsauth add wgpsec/AboutSecurity php-serialization-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 聚焦源码层面判断"反序列化/XXE/SSTI 是否成立",核心是验证 Source→Sink 路径上的数据可控性和安全配置。构造 payload、链条利用等运行时技术属于对应黑盒 exploit skill 范畴。
| 类型 | 典型 Sink | 利用条件 | 严重度 |
|------|-----------|----------|--------|
| 反序列化 | unserialize, phar:// 触发函数 | 用户可控序列化数据 + 可用 Gadget 类 | Critical |
| XXE | DOMDocument::loadXML, simplexml_load_string, XMLReader::xml | 外部实体未禁用 + 用户可控 XML 输入 | High-Critical |
| SSTI | Twig::render, Smarty::display, Blade {!! !!}, eval | 用户输入直接进入模板渲染上下文 | Critical |
unserialize 调用,追踪参数来源(Cookie、Session、缓存、数据库、HTTP 请求体),判断用户是否可控file_exists/is_dir/fopen/filesize/copy 等 40+ 文件系统函数在处理 phar:// 协议时自动触发反序列化,检查路径参数是否用户可控__destruct/__wakeup/__toString 入口出发,沿链式方法调用追踪到危险 Sink(文件写入/命令执行/SQL 操作)。重点关注 Composer 依赖中的 Gadget 类unserialize($data, ['allowed_classes' => [...]]) 是否生效?空数组 [] 或 false 才完全安全,true(默认)不做任何限制libxml_disable_entity_loader(true) 禁用外部实体。PHP 8.0+ 该函数已废弃且默认禁用,但 LIBXML_NOENT 标志仍可重新启用loadXML($input, LIBXML_NOENT) 是最大风险点,该标志会展开外部实体。即使不传 LIBXML_NOENT,PHP < 8.0 默认仍可能加载实体simplexml_load_string 默认安全(PHP 8.0+),但 LIBXML_NOENT 标志使其危险;XMLReader::xml 同理{{ user_input }} 变量输出通常只是渲染变量并受自动转义保护;SSTI 重点检查用户输入是否进入模板源码解析流程,如 createTemplate($userInput)、动态拼接模板字符串,或沙箱模式 sandbox 策略过于宽松(允许危险 filter/function){php} 标签(Smarty 3.1+ 已废弃但可能未禁用)、{if} 表达式中注入 PHP 函数调用({if system('id')}{/if}){!! $var !!} 输出未转义内容,若 $var 用户可控则存在 XSS 或更严重风险;@php 指令如果可注入则直接 RCEeval/preg_replace(/e) + 字符串替换模式,自研模板引擎常见的致命组合unserialize 调用点已逐一审查参数来源allowed_classes 配置已验证,默认值 true 已标记LIBXML_NOENT 标志使用情况已确认libxml_disable_entity_loader 调用状态已检查(PHP < 8.0)testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能