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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-79387-PbootCMS-SQL-Injection — CVE-2026-79387の概念実証。PbootCMSのユーザー管理における認証済みSQLインジェクションで、任意のフィールド更新とアカウント乗っ取りを可能にします。 | Kitploit
ツール/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

CVE-2026-79387の概念実証。PbootCMSのユーザー管理における認証済みSQLインジェクションで、任意のフィールド更新とアカウント乗っ取りを可能にします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-79387: PbootCMS V3.2.5 ユーザー管理モジュールにおける SQL インジェクション

概要

フィールド詳細
CVE IDCVE-2026-79387
製品PbootCMS
影響を受けるバージョン3.2.0 – 3.2.5、およびそれ以前の可能性あり
脆弱性の種類SQL インジェクション (CWE-89)
攻撃ベクトルリモート (認証済み)
CVSS 深刻度高
発見者JiahaoLi
ベンダーhttps://www.pbootcms.com/

脆弱性の説明

PbootCMS V3.2.5 のユーザー管理モジュールに SQL インジェクションの脆弱性が存在します。この脆弱性は /apps/admin/controller/system/UserController.php の mod() メソッド (149 行目) および /apps/admin/model/system/UserModel.php の modUser() メソッドに存在します。

field パラメータは GET リクエストを通じて完全にユーザーが制御でき、ホワイトリスト検証が一切行われていません。value パラメータも同様にユーザーが制御でき、SQL の UPDATE 文に直接連結されます。認証済みの攻撃者は field として任意のデータベースカラム (例: password、username、status、role) を指定でき、任意のデータ操作が可能になります。

根本原因

// UserController.php - mod() method
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
    if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
        location(- 1);
    }
}

$field と $value は $_GET スーパーグローバルから直接取得され、サニタイズもホワイトリストもパラメータ化クエリもなしに SQL 文字列へ連結されます。この文字列はその後 UserModel::modUser() に渡され、さらに基底クラスの Model::update() メソッドへ転送されます。引数が文字列(配列ではない)であるため、checkKey() によるフィールド名の検証をバイパスし、SET 句にそのまま埋め込まれます:

UPDATE ay_user SET <user-controlled>= '<user-controlled>', update_user='admin' WHERE ucode='<ucode>'

コールチェーン

GET /admin.php?p=/User/mod&ucode=10002&field=password&value=<MD5>
  → UserController::mod()
    → UserModel::modUser($ucode, "password='<value>',update_user='admin'")
      → Model::table('ay_user')->where("ucode='$ucode'")->update($data_string)
        → SQL: UPDATE ay_user SET password='<value>',update_user='admin' WHERE ucode='10002'

影響

認証済みの攻撃者は以下を実行できます:

  1. 任意のユーザーのパスワードを変更 — スーパー管理者を含む(組み込みの創設者 ucode=10001 を除く)。
  2. アカウントステータスを変更 — 任意のアカウントを有効化または無効化。
  3. より深いSQLを注入 — value パラメータでシングルクォートのエスケープが可能であり、スタック型またはトートロジーベースの攻撃を可能にする可能性があります。

これはアカウント乗っ取りおよびCMSバックエンドの完全な制御につながります。

再現手順

前提条件

  • PbootCMS V3.2.5 をローカルにインストール済み(192.168.1.104、Apache/PHP 7.2.1/SQLite でテスト済み)
  • 有効なバックエンド管理者アカウント

ステップ 1: 管理パネルへのログイン

PbootCMS の管理ダッシュボードにアクセスし、デフォルトの admin アカウントでログインします。

Admin Dashboard

ステップ 2: ターゲットユーザーの作成

システム管理 → ユーザー管理 → ユーザー追加 に移動します。新しいユーザーを作成します:

  • ユーザー名: admin2
  • パスワード: admin
  • ロール: システム管理者

Create User

ステップ 3: ユーザーの存在確認

ユーザーリストで admin2 が ucode=10002 として確認できます:

User List

ステップ 4: 初期パスワードの確認

新しいブラウザウィンドウを開きます。admin2 としてパスワード 123456 でログインを試みます — 実際のパスワードは admin であるため、これは失敗します:

Login Failed

ステップ 5: ペイロードの作成と実行

すでにログイン済みの管理者ブラウザを使用して、以下に移動します:

http://192.168.1.104/PbootCMS/admin.php?p=/User/mod&ucode=10002&field=password&value=14e1b600b1fd579f47433b88e8d85291

14e1b600b1fd579f47433b88e8d85291 は 123456 の MD5 ハッシュです。

mod() メソッドはインジェクションを実行し、location(-1) を介してリダイレクトします:

Payload Executed - Not Found

ステップ 6: パスワード変更の確認

次に、admin2 / 123456 でログインを試みます:

Login Success

SQL インジェクションによりパスワードが正常に変更されました。 ユーザーは新しいパスワードでログインしており、完全なアカウント乗っ取りが確認されました。

ソースコード分析

脆弱なコード (UserController.php、~149 行目)

Source Code

データベース層 (Model.php - update メソッド)

update() が文字列引数を受け取ると、その文字列はエスケープされずに そのまま SET 句で使用されます:

final public function update($data = null)
{
    if (is_array($data)) {
        // Array path: checkKey() validates field names
        ...
    } else {
        // String path: NO VALIDATION AT ALL
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Direct execution, no prepared statement
}

修復

  1. field パラメータに対するホワイトリスト検証 — 既知のカラム名(status、username、realname、password)のみを許可する。
  2. パラメータ化クエリ — 文字列連結ではなくプリペアドステートメントを使用する。
  3. ユーザー入力のエスケープ — 少なくとも $value をサニタイズし、クォートの脱出を防ぐ。
  4. パスワードハッシュ化の強制 — field が password の場合、保存前に値へ encrypt_string() を適用する。
  5. 単独変更パスの制限 — mod() 内の「単一フィールド変更」分岐では、有効な CSRF トークンとロールレベルの認可チェックを必須とする。

参考資料

  • PbootCMS 公式サイト
  • Gitee 上の PbootCMS ソース
  • CVE-2026-79387

開示: この脆弱性はベンダーへ責任ある開示を行いました。影響を受けるバージョンを使用している場合は、直ちに更新し、すべてのバックエンドアカウントを監査してください。

ツールをダウンロード