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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
mysql-jdv-definer-sqli — MySQL Community Server 26.7.0 - 高 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES | Kitploit
ツール/GitHubGitHub/abraxas/mysql-jdv-definer-sqli
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストデータベースセキュリティラボと実践
GitHubabraxas/mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

MySQL Community Server 26.7.0 - 高 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - mysql-jdv-definer-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

Class: SQLi Reach: Remote

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

JSON Duality DML は JSON 文字列値を escape_string_for_mysql (バックスラッシュのみ) で連結し、その後、ビューの DEFINER sctx に切り替えた上で、呼び出し元の sql_mode の下で parse_sql を実行する。SET SESSION sql_mode='NO_BACKSLASH_ESCAPES' により、\' が SQL リテラルを終了させる。' を含む JSON 文字列は、DEFINER としてサブクエリ / SET リストを注入する。ラボ: ビューに対する DML のみを持つ呼び出し元が、secret.s を射影された name カラムに読み出す。

デフォルトの CREATE VIEW は DEFINER である。X Plugin は既にそのモードで分岐している。JDV はそうではない。機能ゲートあり: JSON Duality View が必要。

IDCVE 未割当
ClassSQLi (DEFINER; RCE ではない)
ReachRemote (認証済み SQL; JSON Duality View に対する DML が必要)
CWECWE-89
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProductMySQL Community Server mysqld
Affected26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
Auth認証済み; JSON Duality View に対する INSERT または UPDATE
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 のみ。射影された $.name に証拠あり。

攻撃者ができること

SQL SECURITY DEFINER の JSON Duality View に対する DML を保持する。SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'。JSON 値に ' を含む文字列フィールドを (SELECT で取得した etag を使って) UPDATE する。生成された _utf8mb4 '...' リテラルが終了する。ステートメントの残りは DEFINER として実行される。ラボでは secret.s.note を射影された name カラムに SELECT する。secret.s への直接 SELECT は 1142 となる。

その sql_mode がなければ、同じ JSON はリテラル名として保存される。クォートはデータのままである。

発見の経緯

同じ 26.7.0 の調査。デフォルトデーモンの未公開 Crit/High は空だった。JSON Duality DML は依然として値を連結している。

sbuf.append("_utf8mb4 '");
escape_string_for_mysql(&my_charset_utf8mb4_bin, ...);
sbuf.append(1, '\'');

create_sctx_guard は run_substmt の前に view_sctx をインストールする。呼び出し元の sql_mode が parse_sql の見るものである。

誤った方向: ビュー名と AS の間の SQL SECURITY DEFINER は 1064 となる (デフォルトは既に DEFINER)。現在の行と同じ name はスキップされる (is_equal)。異なる値に対して注入すること。Etag は必須。

ラボ

cd lab
./run.sh

イメージ mysql:26.7.0。公開 127.0.0.1:18640。ビュー app.dv は app.t 上の DEFINER root@%。シークレットは secret.s に。被害者はビューに対する SELECT/INSERT/UPDATE のみを持つ。

SUCCESS mysql-jdv-definer-sqli victim-secret=denied nbe-inject=yes view-has-witness=yes default-mode-inject=no dump=26.7.0 image=mysql:26.7.0 MYSQL-JDV-DEFINER-SQLI-WITNESS

修正

JDV DML 文字列を、X Plugin が既に持つ同じ NO_BACKSLASH_ESCAPES 分岐 (escape_sql_quote 対 escape_string_for_mysql) でエスケープする。生成される INSERT/UPDATE をパラメータ化する。DEFINER sctx の下で連結された値に対して parse_sql を行わない。

参考文献

  • github.com/mysql/mysql-server タグ mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/json_duality_view/dml.cc append_json_dom / create_sctx_guard
  • 関連パック: abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path · abraxas/mysql-set-role-leftover
ツールをダウンロード