Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
php2shell-exposurehunt — PHP2Shell の露出を探索するためのリポジトリと関連分析 | Kitploit
ツール/GitHubGitHub/deathbydata/php2shell-exposurehunt
防御ツール脆弱性分析構成監査情報収集脅威インテリジェンスインシデントレスポンスログ分析
GitHubdeathbydata/php2shell-exposurehunt

php2shell-exposurehunt

PHP2Shell の露出を探索するためのリポジトリと関連分析

リポジトリを見る
116時間25分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

php2shell-exposurehunt

PHP2Shell(CVE-2026-109618 / CVE-2026-109619)向けのDefender XDRエクスポージャーハンティング。

v3.3 · 2026年10月22日

目的: PHP2Shellに露出している可能性がある、PHPを実行中のオンボード済みデバイスを検出する。

スコープ: Defender XDR Advanced Hunting · オンボード済みのWindowsおよびLinuxエンドポイント · デフォルトで30日間の遡及 · アクティブなPHPのみ。対象外: 休眠状態のインストールおよび非管理デバイス。Sentinelでは実行不可。インストール済みソフトウェア(TVM)テーブルはDefender XDRでのみクエリ可能なため。

ハント(OSごとに順番に実行)

ハントWindowsLinux確認内容
1windows/01-any-php.kqllinux/01-any-php.kqlPHPはあるか? デバイスごとにYes/No。
2windows/02-evidence-breakout.kqllinux/02-evidence-breakout.kqlバージョン付きのエビデンス内訳。
3windows/03-safety-net.kqllinux/03-safety-net.kqlセーフティネット: Webポートでサービス提供中のデバイス、リッスン中のプロセス、PHPの状態。

ハント対象

すべてのイベントチェックは、各ハントの先頭にある単一の遡及ウィンドウ let Lookback = 30d; を使用する。IPアドレスは、過去7日間のアダプターごとの最新レポートから取得する。インストール済みソフトウェアは現在のTVMスナップショットである。オンボード済みのエンドポイントのみをチェックする(OnboardingStatus == "Onboarded"、DeviceCategory == "Endpoint")。

PHP検出ブロック(ハント1、2、3)

以下のいずれかに一致した場合、そのデバイスはPHP検出済みとみなす。

名前のマッチング方法:

  • ファイル名は固定リストではなく正規表現でマッチングする。各正規表現は大文字小文字を区別せず、アンカー付き(^…$)であるため、ファイル名全体に一致する必要があり、部分一致はしない。
  • まず軽量な名前プレフィックスフィルターを実行する: startswith "php"、さらに両OSで frankenphp、Linuxでは lsphp。その後、残ったものに対してのみ正規表現を実行する。
  • 以下の表の名前は、各パターンが一致するものと拒否するものの例である。他のバージョン番号(例えば将来の php9.dll)は自動的に一致する。
  • patterns.test.js は各正規表現をこれらの例に対して実行する。正規表現を変更した場合は、そこの例も更新すること。

Windows

チェックテーブル一致対象重要な理由
PHP実行ファイルの起動DeviceProcessEvents正規表現 ^(php(-cgi|-win)?|frankenphp)\.exe$。これは正確に4つの名前のみを許可する: php.exe(CLI)、php-cgi.exe(FastCGIワーカー)、php-win.exe(CLI、コンソールなし)、frankenphp.exe(Webサーバーに埋め込まれたPHP)。phpstorm64.exe やその他の php* ツールは一致しないPHPが実行されたことを証明する。ハント2ではバイナリのバージョン情報(ProcessVersionInfoProductVersion)からバージョンを表示する
PHPエンジンDLLの読み込みDeviceImageLoadEvents正規表現 ^php\d*(ts|isapi|apache[\w_]*)?\.dll$: php、任意のバージョン番号、オプションの ts / isapi / apache… サフィックス、そして .dll。例は以下のDLL表にある。拡張DLL(php_curl.dll やその他の php_*.dll)は一致しない。php の直後にアンダースコアが許可されていないためIISやApacheなど別のプロセス内でPHPが動作しているのを確認できる唯一の方法。そこでは php*.exe は起動しない。ハント2ではDLLとそれを読み込んだプロセスを表示する
インストール済みソフトウェアDeviceTvmSoftwareInventory正規表現ではない: SoftwareName has "php"(名前に php が単語として含まれる)または SoftwareVendor =~ "php"(完全一致、大文字小文字を区別しない)登録済みのインストールを検出する。Zipインストール(Windowsで一般的な方法)は通常登録されない

Windowsパターンが一致するPHPエンジンDLLの例

DLL内容典型的なホストプロセス(hunt 2 に表示)
php8.dll、php7.dllエンジン、非スレッドセーフビルドphp-cgi.exe(IIS、nginx、Apache mod_fcgid 配下の FastCGI)、php.exe
php8ts.dll、php7ts.dll、php5ts.dllエンジン、スレッドセーフビルドhttpd.exe(Apache モジュール)、php.exe
php8apache2_4.dll、php7apache2_4.dll、php5apache2_2.dllApache モジュールローダーhttpd.exe
php5isapi.dllレガシーな IIS ISAPI モジュール(PHP 5.2 以前、サポート対象外)w3wp.exe

この表は一般的な名前を列挙したものであり、許可リストではありません。パターンに一致する名前であればどれでもマッチします。DLL 名からわかるのはメジャーバージョンのみです。正確なバージョンは、同じデバイス上の php-cgi.exe または php.exe のプロセス行、あるいはインストール済みソフトウェアから取得します。

Linux

チェックテーブルマッチ条件重要な理由
PHP バイナリの起動DeviceProcessEvents正規表現 ^(php[\d.]*|php-(fpm|cgi)[\d.]*|lsphp[\d.]*|frankenphp)$: php、php-fpm、php-cgi、lsphp(LiteSpeed)のそれぞれに、数字とドットからなる任意のバージョンが付いたもの、および frankenphp。例: php、php8.3、php83、php-fpm8.3、php-cgi8.2、lsphp83。phpunit、phpize、php-config などのツールはマッチしません。ベース名の後に続けられるのは数字とドットのみだからですPHP が実行されたことを証明します。hunt 2 では、2 つ目の正規表現 php-?(?:fpm|cgi)?/?(\d+\.\d+) によって名前、パス、またはコマンドラインから抽出された major.minor のヒントが表示されます(例えば php-fpm8.3 や /etc/php/8.3/ からは 8.3.x)
インストール済みパッケージDeviceTvmSoftwareInventory正規表現ではありません: SoftwareName contains "php"(部分文字列なので、php8.3-fpm や libapache2-mod-php8.3 のようなバージョン付きの名前もマッチします)または SoftwareVendor =~ "php"Apache mod_php と、ウィンドウより前から稼働している php-fpm を確認する唯一のチェックです。Linux にはここでライブラリロードのチェックがなく、フォークされた php-fpm ワーカーはプロセス起動を生成しないためです

Hunt 3 のセーフティネットチェック

チェックテーブルマッチ条件重要な理由
アクティブな Web 配信DeviceNetworkEvents固定ポートリスト(80、443、8080、8443)での InboundConnectionAccepted。ループバックは除外されます(RemoteIPType != "Loopback")。個別の送信元とパブリックな送信元、および受け入れプロセス(via <process>)を表示しますWeb サーバーがルックバックウィンドウより前に起動していても、デバイスが配信していることを証明します。ntoskrnl.exe = HTTP.sys(IIS、ADFS、RD Gateway、Windows Admin Center、SSTP)
Web サーバーの起動DeviceProcessEvents正規表現ではありません: 大文字小文字を区別しない(in~)完全一致名の固定リスト。Windows: w3wp.exe、httpd.exe、nginx.exe、caddy.exe、lighttpd.exe、frankenphp.exe。Linux: httpd、apache2、nginx、lshttpd、litespeed、openlitespeed、caddy、lighttpd、frankenphpウィンドウ内で起動し、PHP をロードしなかった Web サーバーは、高い信頼度で「Not seen」となります。Windows では、正規表現 -ap\s+"?([^"\s]+) によって w3wp.exe のコマンドラインから抽出された IIS アプリプール名も表示されます

hunt 3 における PHP 列の値

値意味
PHP seen (see hunt 2)少なくとも 1 つの PHP 検出チェックがマッチしました。
Not seenPHP の証拠がなく、かつウィンドウ内で Web サーバーが起動した(高い信頼度)か、デバイスが Web を配信していません。
Not seen - no web server start in <N>d(N = Lookback)Web ポートで配信していますが、検査すべき Web サーバープロセスの起動がありません。これが残存する盲点です: ホスト上の via プロセスを確認してください。

使用方法

  • 各ハントはデフォルトで、その OS のオンボード済みデバイスをすべて返します。サーバーが先、次にエビデンス行が先です。エビデンスのみの行を返すには、uncomment for evidence-only rows と記された行のコメントを解除してください。
  • ルックバック: 各ハントの先頭にある let Lookback = 30d; の1行を変更し、すべてのハントで同じ値を使用してください。
    • 30日が最大です。Defender XDR Advanced Hunting はデバイスイベントを30日間保持します。これより大きい値を指定してもエラーにはならず、黙って30日分が返されるだけです。そのため npm test は 30d を超える値や、ハント間で値が混在している場合を拒否します。
    • 期間を短くするとクエリコストは下がりますが、手動確認のために「Web サーバー起動なし」に該当するサーバーが増えます。ベースライン化済みの環境での再実行にのみ使用してください。
    • 30日を超える侵害のルックバック(たとえば 2026年8月1日からの早期知識ウィンドウ)には、より長い保持期間を持つ Sentinel を使用してください。これはこのエクスポージャーパックとは別のタスクです。
  • バージョンは修正済みリリース(8.5.12、8.4.27、8.3.36、8.2.35)と比較してください。古いブランチにはアップストリームの修正がありません。Linux では、ディストリビューションがアップストリームのバージョンを変えずに修正をバックポートするため、パッケージの changelog またはディストリビューションのセキュリティトラッカーで CVE ID を確認してください。

既知の制限

両 OS:

  • アクティブな PHP のみが対象です。ルックバック期間より前に起動し、その後再起動されていないプロセスはプロセスイベントを残しません。ハント3はこれらを「no web server start in d」として手動確認対象にフラグします。
  • バージョンチェックはバージョン番号に基づきます。ベンダーがバンドルしたビルドは、バージョン変更なしに修正を含む場合があります。
  • TVM の名前フィルターは、すべてのテナントのインベントリ命名に対して検証されていません。

Windows:

  • Defender はすべての DLL ロードを記録するわけではありません。
  • PHP の Zip インストールは通常、インストール済みソフトウェアに表示されません。

Linux、Linux ポジティブコントロールテストが合格するまで未検証:

  • TVM のパッケージ名に「php」が含まれること(ハント1〜3のパッケージチェック)。- 保留中。これまでの実世界でのポジティブな結果はこれが機能することを示していますが、最終的な検証が必要です。

Linux のカバレッジギャップ:

  • ライブラリロードのチェックはありません。Apache mod_php、および期間より前から稼働している php-fpm(そのワーカーは fork されており、起動されたものではない)は、パッケージチェックによってのみ検出されます。
  • ソースからビルドした PHP やコンテナ内で実行している PHP は、パッケージとして表示されない場合があります。
  • プロセスのバージョンは、バイナリ名またはパスのみから得られる major.minor のヒントです。

メンテナンス

PHP 検出ブロックは、各 OS の3つのハント内で同一です。3つすべてをまとめて変更してください。これらがずれると npm test が失敗します。検出用正規表現を変更した場合は、tests/lint/patterns.test.js の期待されるマッチと非マッチを更新してください。テストはクエリから正規表現を読み取るため、コピーではなくあなたの編集内容をチェックしています。

テスト

ツールをダウンロード