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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
phpmyadmin-vqb-xss — phpMyAdmin 5.2.3 - 高 - リモート - XSS - Designer Visual Query Builder | Kitploit
ツール/GitHubGitHub/abraxas/phpmyadmin-vqb-xss
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストラボと実践
GitHubabraxas/phpmyadmin-vqb-xss

phpmyadmin-vqb-xss

phpMyAdmin 5.2.3 - 高 - リモート - XSS - Designer Visual Query Builder

リポジトリを見る
3日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - phpmyadmin-vqb-xss

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-vqb-xss

phpmyadmin-vqb-xss

クラス: 格納型XSS 到達範囲: リモート

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

js/src/designer/history.js はビジュアルクエリ履歴を innerHTML で構築する。カラム名は $('<div/>').text(...).html() を経由する。テーブル名は経由しない。TableName は依然として < と > を許可している。共有データベース上で CREATE TABLE 権限を持つ低権限アカウントが HTML 識別子を仕込む。高権限ユーザーが Designer を開くと、getTableName() がページ上に存在し、DesignerHistory.display() がそれを #ab に書き込む。

phpMyAdmin オリジンにおける格納型XSS。PMASA-2025-1 と同クラスだが、機能が異なる。Check-tables の見出しはエスケープされていた。この経路はされていなかった。

IDCVE 未採番
クラス格納型XSS
到達範囲リモート (認証済み CREATE TABLE、被害者が Designer を開く)
CWECWE-79
CVSSHigh: 8.0 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
製品phpMyAdmin
影響バージョン5.2.3 タグ RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
認証認証済み。攻撃者は被害者が Designer で開くデータベースに対する CREATE TABLE 権限が必要
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

HTML テーブル名を仕込み、高権限ユーザーがそのデータベースで Designer を開き、ビジュアルクエリ履歴をレンダリングするのを待つ。

権限メソッド / シンク偵察 / 完全性 / 可用性ラボ実証または推測
phpMyAdmin オリジンへのマークアップ注入DesignerHistory.display() が getTab() を #ab innerHTML に連結被害者オリジンの完全性ラボ実証済み。phpmyadmin:5.2.3 上のライブ history.js。<h3> に <i id="pma-vqb"> が含まれた
designer の table_name 属性からの脱出database_tables.twig の small_tab_pref_1 が designerTable.getTableName() を使用Designer DOM 内の生の MySQL 名の偵察ラボ実証済み、生の識別子として読み取り可能
被害者のセッション Cookie と CSRF token の読み取り履歴レンダリング後の同一オリジンスクリプト被害者 PMA セッションの偵察PMA オリジンにおける格納型XSSからの推測。このラボではスクリプトではなく <i> マーカーを使用
被害者の MySQL アカウントとして SQL 実行、ユーザー管理、エクスポートトークン付き POST /sql、/server/privileges、exportその MySQL アカウントが触れられるものの完全性推測。PMASA-2025-1 と同クラスの影響
2FA / userconfig の変更被害者として POST /config/set被害者設定ストアの完全性推測。同種の残存問題であり、このラボではない

この残存問題で除外されたもの: 未認証アクセス、OS RCE、VQB の OK ボタン経路。.small_tab_pref_click_opt は table_name を事前エスケープし、Twig がさらに自動エスケープするため、そのクリックは現在 getTab() にエンティティを渡している。これは history.js の修正ではない。カラムセルはテキストエスケープされたままである (c<b id=pma-col>y、<b id="pma-col"> ノードはなし)。

同じピン: WebAuthn CustomServer の残存問題。

発見の経緯

phpMyAdmin RELEASE_5_2_3 をピン留めした。PMASA-2025-1/2/3 はすでに 5.2.2 に含まれている。Designer は依然として VQB 履歴 HTML を手作業で構築している。

js/src/designer/history.js (js/dist/designer/history.js として出荷):

temp = historyArray[i].getTab();
str += '<h3 class="tiger"><a href="#">' + temp + '</a></h3>';
// ...
'<td width="175" style="padding-left: 5px">' + $('<div/>').text(historyArray[i].getColumnName()).html() + '<td>';

libraries/classes/Dbal/TableName.php は空でないこと、最大 64 文字、末尾スペースなしのみをチェックする。< と > は合法である。MySQL はクォートされた識別子内でこれらを受け入れる。

templates/database/designer/database_tables.twig は designerTable.getTableName() を .small_tab_pref_1 の table_name にコピーする。VQB オプションセルは同じ名前の事前エスケープされたコピーを使用する。

すでに記録済みの誤った道: 二重エスケープされたオプションボタン属性を修正とみなすこと (そうではない - small_tab_pref_1 は依然として生の名前を露出しており、history.js がシンクである)、カラムヘルパーがテーブル名をカバーしているとみなすこと、未認証 XSS の主張、リバースシェル。茶番である。

ラボ

python3 phpmyadmin-vqb-xss-Abraxas-Labs.py
# or: cd lab && ./run.sh

対象は http://127.0.0.1:19250 のみ。イメージは phpmyadmin:5.2.3 と mysql:8.0。Compose プロジェクトは phpmyadmin-vqb-xss。poc サービス内の Playwright Chromium。実行後にスタックは破棄される。

2 ユーザー、共有 shareddb。低権限の creator が CREATE TABLE \tx` (`cy` INT)を実行する。高権限のvictim が phpMyAdmin にログインし、query=1で Designer を開く。ライブhistory.js はコンテナからのコピーである (h3-unescaped=yes、カラムヘルパーあり)。Chromium はページ上の getTableName()から取得したテーブル名でDesignerHistory.display()` を呼び出す。

結果: #ab h3.tiger の innerHTML は <a href="#">t<i id="pma-vqb">x</i></a>。カラム td のテキストは c<b id=pma-col>y で、b#pma-col ノードは存在しない。

SUCCESS phpmyadmin-vqb-xss h3-markup=yes col-escaped=yes how=live PMA-VQB-XSS-WITNESS

修正

getTab() を <h3> に連結する前に $('<div/>').text(temp).html() または Functions.escapeHtml でエスケープする。1 つの属性に対する Twig の二重エンコードに依存しないこと。カラム名ヘルパーをモデルとして維持する。

参考資料

  • github.com/phpmyadmin/phpmyadmin タグ RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • js/src/designer/history.js
  • libraries/classes/Dbal/TableName.php
  • 近傍で修正済み (この経路ではない): PMASA-2025-1 Check-tables 見出し
  • 同じピン: PMA-5.2.3-WebAuthn-2FA
  • CWE-79

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。

ツールをダウンロード