skills/code-audit/php/php-file-audit/SKILL.md
PHP 源码文件操作类漏洞审计。当在 PHP 白盒审计中需要检测文件相关漏洞时触发。 覆盖 5 类文件风险: 任意文件上传(类型绕过/路径穿越/二次渲染)、任意文件读取(include/fread/路径穿越)、 任意文件写入(日志注入/配置覆盖)、文件系统竞争(TOCTOU/符号链接)、归档提取漏洞(Zip Slip)。 需要 php-audit-pipeline 提供的数据流证据。
npx skillsauth add wgpsec/AboutSecurity php-file-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 聚焦源码层面判断"文件操作漏洞是否成立",核心是验证路径可控性、内容可控性和执行可达性。构造上传绕过 payload、LFI 日志投毒等运行时利用技术属于对应黑盒 exploit skill 范畴。
根据遇到的 Sink 函数类型,进入不同审计分支:
| Sink 函数 | 分支 | 典型严重度 |
|-----------|------|-----------|
| move_uploaded_file, copy($_FILES) | 文件上传 | Critical-High |
| include/require/include_once/require_once | 文件读取+执行 | Critical |
| file_get_contents/readfile/fread/highlight_file | 文件读取 | High-Medium |
| file_put_contents/fwrite/fopen('w') | 文件写入 | Critical-High |
| ZipArchive::extractTo/PharData::extractTo | 归档提取 | High |
| file_exists/is_file + 后续操作 | 竞争条件 | Medium-High |
上传漏洞本质是三要素同时满足: 可执行扩展名 + Web 可达存储路径 + 未被重命名/内容清洗。
.phtml/.pht/.php5/.phar/.shtml,白名单更安全但要检查大小写处理逻辑$_FILES['type'] 来自客户端完全可伪造;finfo_file()/getimagesize() 验证文件头但图片马(GIF89a + PHP 代码)可绕过../ 控制存储位置,跳出预定上传目录md5(time()) 等可预测命名可被猜解,random_bytes() 更安全include 系列既读取又执行,危害远大于纯读取函数:
include($dir . '/' . $page . '.php') — 检查 $page 是否用户可控,../ 穿越是否被过滤.php 后缀;高版本已修复但审计遗留系统时仍需关注php://filter/convert.base64-encode/resource= 读取源码、php://input 注入代码、data:// 执行 payloadallow_url_include=On 时远程文件包含成立,检查 php.ini 配置file_get_contents/readfile 虽不执行但可泄露敏感配置(数据库密码、API Key)写入漏洞需要三要素: 路径可控 + 内容可控 + 写入文件可被执行。
file_put_contents($path, $content) 中两个参数都用户可控时,直接写入 Webshellinclude 加载 → 间接代码执行。审查日志路径是否可预测、内容是否被过滤.htaccess(使 .jpg 被解析为 PHP)或 PHP 配置文件(注入代码到 <?php return [...];)session.save_path 下的 session 文件内容部分用户可控,配合 LFI 实现 RCEZipArchive::extractTo() 不验证条目名称中的 ../../,恶意归档可向任意目录写文件extractTo() 存在路径穿越风险.. 的路径;或解压到临时目录后逐文件校验移动is_file($path) 检查通过后、unlink($path) 执行前,攻击者替换文件为符号链接 → 删除任意文件file_get_contents($userPath) 若 $userPath 是符号链接则读取链接目标文件,绕过目录限制rename() 是原子操作可用于安全替换;先写临时文件再 rename 到目标位置可避免竞争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 伪造的场景都应使用此技能