jpskill.com
🛠️ 開発・MCP コミュニティ

php-cmd-audit

PHPのWebソースコードを分析し、コマンドインジェクションの脆弱性を特定して、ユーザー入力がコマンドに結合される経路を追跡し、PoCと修正提案を提示する監査ツールです。

📜 元の英語説明(参考)

PHP Web 源码命令注入审计工具。识别命令执行 Sink(exec/system/shell_exec 等),追踪用户输入进入命令拼接,输出可利用性分级、PoC 与修复建议(禁止省略)。

🇯🇵 日本人クリエイター向け解説

一言でいうと

PHPのWebソースコードを分析し、コマンドインジェクションの脆弱性を特定して、ユーザー入力がコマンドに結合される経路を追跡し、PoCと修正提案を提示する監査ツールです。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o php-cmd-audit.zip https://jpskill.com/download/5997.zip && unzip -o php-cmd-audit.zip && rm php-cmd-audit.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5997.zip -OutFile "$d\php-cmd-audit.zip"; Expand-Archive "$d\php-cmd-audit.zip" -DestinationPath $d -Force; ri "$d\php-cmd-audit.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して php-cmd-audit.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → php-cmd-audit フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] php-cmd-audit

PHP 命令注入監査(php-cmd-audit)

PHP プロジェクトのソースコードを分析し、システムコマンド実行に関連するコードを特定し、ユーザー入力をコマンド構築点まで追跡して、コマンドインジェクションのリスクが存在するかどうかを検証します。

CRITICAL

  • 悪用可能性の判断には、データフローチェーンの証拠を必ず使用してください。
  • 省略禁止:いかなる省略プレースホルダーも使用しないでください。各項目には、完全な証拠チェーンと観測可能な検証フレームワークを含める必要があります。
  • 各高危険度/中危険度項目には、位置の証拠 + Source→Sink データフローチェーン + 悪用可能な前提条件 + 実行可能な PoC + 修正推奨事項を必ず含めてください。

分類と番号付け

  • 詳細については shared/SEVERITY_RATING.md を参照してください。
  • 脆弱性番号:{C/H/M/L}-CMD-{連番}

コマンド実行 Sink(必須)

以下の関数/構文を特定してください。

  • exec/system/shell_exec/passthru
  • proc_open/popen/pcntl_exec
  • バッククォート構文:`cmd` 危険なパターン:
  • コマンド文字列がユーザー入力(GET/POST/Body/パラメータフィールド)を連結して構成されている場合
  • ホワイトリスト化されていない、またはシェルエスケープがされていない場合、特に ;|&$()、バッククォート、改行などが含まれる場合

追跡と検証(必須)

php-route-tracer をトリガーする条件:

  • コマンド文字列が複数の変数で構成されている場合
  • パラメータが JSON デコードまたは多層的に渡されている場合
  • コマンド構築が if/try 分岐の影響を受けている場合

レポート出力

以下に出力されます。

{output_path}/vuln_audit/cmd_{timestamp}.md

脆弱性項目テンプレート(必須)

### [{等級プレフィックス}-CMD-{連番}] {リスクタイトル}

| 項目 | 情報 |
|------|------|
| 深刻度 | {🔴/🟠/🟡/🔵} (CVSS {score}) |
| 到達可能性 (R) | {0-3} - {理由} |
| 影響範囲 (I) | {0-3} - {理由} |
| 悪用複雑度 (C) | {0-3} - {理由} |
| 悪用可能性 | ✅ 確認済み / ⚠️ 検証待ち / ❌ 悪用不可 / 🔍 環境依存 |
| 位置 | {file}:{line} ({Function/Class}) |

#### データフローチェーン(Source → Sink)
(リクエストパラメータの読み取り -> 連結/組み立て -> コマンド実行関数/ステートメントを1行ずつ記述)

#### 悪用可能な前提条件
- 認証要件:{不要/ログイン必要/特定権限必要}
- 入力制御性:{完全に制御可能/条件付きで制御可能/制御不可}
- トリガー条件:{分岐/例外/環境依存}

#### 証拠引用(必須:php-route-tracer から)
各コマンドインジェクションの疑いのある脆弱性については、trace 出力の `## 9) Sink Evidence Type Checklist` の **CMD 行**に対応する証拠要点を項目ごとに引用する必要があります(状態が検証待ちであっても構いませんが、証拠引用は必須です)。
1. `EVID_CMD_EXEC_POINT`:コマンド実行関数/ステートメントの位置(trace の CMD 実行点証拠に対応)
2. `EVID_CMD_COMMAND_STRING_CONSTRUCTION`:コマンド文字列/主要パラメータ構築位置(連結/テンプレート化証拠)
3. `EVID_CMD_USER_PARAM_TO_CMD_FRAGMENT`:ユーザー制御可能パラメータからコマンド主要フラグメントへのマッピング証拠

#### tracer 証拠欠落の処理(必須)
- 上記 1~3 のいずれかの主要証拠要点を特定できない場合、当該脆弱性の状態は `⚠️検証待ち` としかマークできず、直接 `✅悪用可能と確認済み` とすることはできません。

#### 検証 PoC(必須)
```http
POST {完全パス} HTTP/1.1
Host: {host}
{必要な Cookie/Auth}

{Payload}

推奨される修正

  • コマンドパラメータのホワイトリスト化 + 安全なパラメータ連結戦略(shell=true の状況を避ける)を強制的に使用してください。
  • 代替実装を推奨します(例:シェルを介さないプロセス呼び出し方法を使用するか、連結を完全に避ける)。
  • 同様の連結点を特定するためのコード検索ステートメント(rg)を提示してください。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PHP 命令注入审计(php-cmd-audit)

分析 PHP 项目源码,识别系统命令执行相关代码,并追踪用户输入到命令构造点,验证是否存在命令注入风险。

CRITICAL

  • 必须使用数据流链证据判定可利用性
  • 禁止省略:不得出现任何省略占位符;每条条目必须包含完整的证据链与可观测验证框架
  • 每条高危/中危条目必须含:位置证据 + Source→Sink 数据流链 + 可利用前置条件 + 可执行 PoC + 修复建议

分级与编号

  • 详见 shared/SEVERITY_RATING.md
  • 漏洞编号:{C/H/M/L}-CMD-{序号}

命令执行 Sink(必做)

识别以下函数/语法:

  • exec/system/shell_exec/passthru
  • proc_open/popen/pcntl_exec
  • 反引号语法:`cmd` 危险模式:
  • 命令字符串通过拼接包含用户输入(GET/POST/Body/参数字段)
  • 未做白名单/未做 shell 转义,尤其包含 ;|&$()、反引号、换行等

追踪与验证(必做)

触发 php-route-tracer 的条件:

  • 命令字符串由多个变量组成
  • 存在参数经过 JSON 解码/多层传递
  • 命令构造被 if/try 分支影响

报告输出

输出到:

{output_path}/vuln_audit/cmd_{timestamp}.md

漏洞条目模板(强制)

### [{等级前缀}-CMD-{序号}] {风险标题}

| 项目 | 信息 |
|------|------|
| 严重等级 | {🔴/🟠/🟡/🔵} (CVSS {score}) |
| 可达性 (R) | {0-3} - {理由} |
| 影响范围 (I) | {0-3} - {理由} |
| 利用复杂度 (C) | {0-3} - {理由} |
| 可利用性 | ✅ 已确认 / ⚠️ 待验证 / ❌ 不可利用 / 🔍 环境依赖 |
| 位置 | {file}:{line} ({Function/Class}) |

#### 数据流链(Source → Sink)
(逐行写出:请求参数读取 -> 拼接/拼装 -> 命令执行函数/语句)

#### 可利用前置条件
- 鉴权要求:{无需/需登录/需特定权限}
- 输入可控性:{完全可控/条件可控/不可控}
- 触发条件:{分支/异常/环境依赖}

#### 证据引用(强制:来自 php-route-tracer)
每条命令注入疑似漏洞必须逐项引用 trace 输出中 `## 9) Sink Evidence Type Checklist` 的 **CMD 行**对应证据要点(允许状态为待验证,但证据引用必须存在):
1. `EVID_CMD_EXEC_POINT`:命令执行函数/语句位置(对应 trace 的 CMD 执行点证据)
2. `EVID_CMD_COMMAND_STRING_CONSTRUCTION`:命令字符串/关键参数构造位置(拼接/模板化证据)
3. `EVID_CMD_USER_PARAM_TO_CMD_FRAGMENT`:用户可控参数到命令关键片段的映射证据

#### tracer 证据缺失处理(强制)
- 若无法定位上述 1~3 任一关键证据要点:该漏洞状态只能标记为 `⚠️待验证`,不得直接给出 `✅已确认可利用`。

#### 验证 PoC(强制)
```http
POST {完整路径} HTTP/1.1
Host: {host}
{必要 Cookie/Auth}

{Payload}

建议修复

  • 强制使用命令参数白名单 + 安全参数拼接策略(避免 shell=true 的情况)
  • 推荐替代实现(如使用不经 shell 的进程调用方式,或完全避免拼接)
  • 给出代码搜索语句(rg)定位同类拼接点