0xshe/php-code-audit-skill/php-filesystem-audit
Claude Code and agent skill by 0xshe/php-code-audit-skill
- community
Checking that the SKILL.md file is still in the repository.
PHP 文件系统操作审计工具。聚焦 mkdir/chmod/chown/unlink/rmdir/link/symlink/readlink/touch/权限与 TOCTOU 等操作的安全风险,为路径校验绕过与写入链利用提供“可利用性增强证据”(不替代 FILE/UPLOAD/WRITE 等 sink 子审计)。
Install
npx vskill@latest install 0xshe/php-code-audit-skill/php-filesystem-auditSKILL.md
PHP 文件系统操作审计(php-filesystem-audit)
分析 PHP 项目中对文件系统的关键操作,特别关注这些操作如何与:
- 路径校验/归一化失败(目录遍历、basePath 缺失)
- 落点写入/读取/包含链路
- 写后触发(可执行性、可包含性)
- 竞争条件(TOCTOU)
发生联动,从而提升真实利用可能性。
覆盖范围(必做)
必须覆盖并输出“证据点 + 风险解释 + 可利用性判断”的点:
1) 创建/目录操作
mkdir($path, $mode, $recursive)rmdir($path)touch($path)tmpfile()/tempnam()- 框架封装的目录创建(如
Storage::put/ensureDirectory的底层封装,若识别得到)
2) 权限/所有权变更(常用于提权链或绕过执行策略)
chmod/chown/chgrpumask
3) 链接与重定向落点(常见 symlink/hardlink 绕过)
symlink($target, $link)link($target, $link)readlink($path)
4) 删除与清理(结合 TOCTOU 或覆盖链)
unlink($path)unlink/rename变体删除rename($src, $dest)(用于落点变更时需特别关注 TOCTOU)copy/move变体(当作为“落点准备步骤”出现)
5) 路径竞态与 TOCTOU(必须单独审计)
对“检查-使用分离”的代码模式给出判定:
- 是否存在
if (realpath/canonicalize + 前缀校验)后又在某个分支/异常处理里重复 join/open/write(路径可能变化) - 是否存在先判断可写/再写入、先检查再执行文件操作
- 是否存在符号链接解析/不一致解析(检查时与实际打开时 resolved path 不一致)
关键输出要求(强制)
每条发现必须包含:
- 位置证据:文件路径与函数/调用点(尽量带行号;找不到行号则标注待定位)
- 操作类型:创建/权限/链接/删除/重命名/拷贝等
- 路径控制来源:路径参数来自 GET/POST/SESSION/配置还是硬编码
- 跟链路的关系(必须至少选一条说明):
- 与
WRITE/UPLOAD落点可执行性或可包含性关联 - 与
FILE(读取/包含)或ARCHIVE(解压落点)关联 - 与鉴权/资源归属关联(例如仅管理员目录有写权限但绕过)
- 与 TOCTOU 竞态关联(检查点 -> 使用点之间路径可能被替换)
- 可利用性判断:
- ✅ 已确认:能证明利用链的关键前置条件由此文件系统操作提供(或与 WRITE/UPLOAD/FILE 的证据形成闭环)
- ⚠️ 待验证:存在风险,但缺少某个关键前置条件或 trace/解析证据不足
- ❌ 不可利用:有强约束(baseDir allowlist 生效、resolved path 一致性保护、权限固定且无法更改、竞态窗口被消除)
- 🔍 环境依赖:需依赖特定文件系统/权限/并发时序/服务端目录结构
- 可触发性约束(强制):
- 仅对“能够被具体 HTTP 路由/入口触发”的文件系统操作生成漏洞条目,并且必须能提供真实路由与完整参数用于 PoC。
- 若无法定位具体路由入口(如纯后台任务/定时任务/命令行工具且入口不可追踪),该 FS 风险只能在报告中标注“未能定位入口,跳过条目生成(待人工补齐触发路径)”,不得仍按漏洞条目模板强行输出不可执行 PoC。
报告输出
输出到:
漏洞编号规范(建议:FS)
- 详见:
shared/SEVERITY_RATING.md - 漏洞编号:
{C/H/M/L}-FS-{序号}
漏洞条目模板(强制)
每条发现必须遵循以下结构(不得省略):
{HTTP Method} {真实路由与完整参数} HTTP/1.1 Host: {host} {必要 Header/Session/JWT/Cookie}
{Payload}
rg -n "(mkdir\\(|rmdir\\(|touch\\(|tmpfile\\(|tempnam\\(|chmod\\(|chown\\(|chgrp\\(|symlink\\(|readlink\\(|link\\(|unlink\\(|rename\\(|copy\\(|symlink\\()" . rg -n "(realpath\\(|canonicalize\\(|dirname\\(|basename\\(|baseDir|dest(path)?|target(path)?)" .
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingphp-filesystem-audit/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/0xshe/php-code-audit-skill/php-filesystem-audit)