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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cakephp-collate-sqli — CakePHP 5.4.2 - 高 - リモート - SQLi - COLLATE照合順序は生のSQLフラグメントです | Kitploit
ツール/GitHubGitHub/abraxas/cakephp-collate-sqli
脆弱性スキャナー脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストデータベースセキュリティ
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 - 高 - リモート - SQLi - COLLATE照合順序は生のSQLフラグメントです

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - cakephp-collate-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-collate-sqli

解説記事: https://abraxaslabs.tech/research/cakephp-collate-sqli

cakephp-collate-sqli

クラス: SQLi 到達性: リモート

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql は文字列値をバインドし、照合順序 (collation) を連結します。IdentifierExpression も同様です。ensureSimpleString は存在しません。Postgres の quoteIdentifier は '"' . trim($collation, '"') . '"' であるため、埋め込まれた引用符が CAST を早期に閉じてしまいます。

リクエストやロケールの照合順序を new StringExpression($term, $collation) に転送するアプリは、その文字列を COLLATE に挿入してしまいます。値はバインドされたままですが、照合順序はバインドされません。

IDCVE 未割当
クラスSQLi
到達性リモート (照合順序/ロケールを StringExpression / IdentifierExpression に転送するアプリ)
CWECWE-89
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
製品CakePHP (cakephp/database)
影響を受けるバージョン5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
認証照合順序/ロケールをこれらのコンストラクタに転送するアプリケーション
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

ユーザー/ロケールの照合順序をこれらのコンストラクタに渡すアプリケーションが必要です。素の cakephp/app は、それ自体では公開フォームで照合順序を公開していません。

権限メソッド / シンク種類ラボ実証または推測
COLLATE の後に SQL を挿入StringExpression::sql が $this->collation を連結コンパイル済み SQL の整合性ラボ実証済み。生 SQL にペイロードがバインドされずに含まれる
識別子でも同様の挿入IdentifierExpression の note COLLATE <payload>コンパイル済み SQL の整合性ラボ実証済み。id_raw_sql にペイロードが含まれる
Postgres の "..." ラップから脱出quoteIdentifier = '"' . trim($collation, '"') . '"'コンパイル済み SQL の整合性ラボ実証済み。コンパイル済み SQL は COLLATE "C" AS text)) || (SELECT ...
脱出を実行して別テーブルを読み取るCAST(... ) || (SELECT note FROM lab_secret ...)DB の偵察ラボ実証済み。結果は xCAKEPHP-COLLATE-SQLI-WITNESS、実行エラーなし
接続ロールで行を変更 / 追加の SQL を実行同じインジェクションDB の整合性推測。ラボは SELECT オラクル
ネガティブコントロール照合順序 Cクローズラボ実証済み。結果は x、ウィットネスなし、コンパイル結果は COLLATE "C"

この残存項目についてクローズ済み: バインドされた文字列値 (:c0 はリテラル x のまま); ensureSimpleString (^[a-zA-Z0-9]+$) を通過する照合順序はこのペイロードではありません。スケルトンアプリに対する未認証 RCE ではありません。シェルではありません。

同じピン留めからの残存項目: window SQLi、attachment CRLF、cache unserialize。

発見の経緯

FunctionsBuilder / filename= のメモの後、5.4.2 にピン留めしました。10 回の調査。残存 SQLi のパスがこれです。StringExpression::sql:

$placeholder = $binder->placeholder('c');
$binder->bind($placeholder, $this->string, 'string');
return $placeholder . ' COLLATE ' . $this->collation;

Postgres の quoteIdentifier は ASCII 引用符で囲み、trim($collation, '"') を適用します。埋め込まれた " は識別子を閉じてしまいます。-- は残った閉じ引用符を飲み込み、Cake は依然としてそれを付加します。

すでに記録済みの誤った方向性: SQLite を唯一のドライバとする見方(concat は実際に存在し、wrap-breakout は Postgres のもの); バインドされた値をインジェクションとみなすこと; ensureSimpleString がここで既に実行されたと主張すること(実行されていない); リバースシェル。茶番です。

ラボ

python3 cakephp-collate-sqli-Abraxas-Labs.py

または

cd lab
./run.sh

必ず http://127.0.0.1:19450 のみを対象とすること。cakephp/database 5.4.2 と Postgres 16 を使用。小さなアプリが ?collation= を StringExpression / IdentifierExpression に転送し、CAST(... AS text) を実行する。シークレットテーブルに証人が格納されている。

SUCCESS cakephp-collate-sqli pin=5.4.2 raw=concat pg-wrap=breakout exec=yes CAKEPHP-COLLATE-SQLI-WITNESS

修正

collation 引数に対する ensureSimpleString()(または collation の許可リスト)。Postgres は識別子を適切にクォートする必要があり、trim とラップの組み合わせでは不十分です。

参考資料

  • github.com/cakephp/cakephp タグ 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • StringExpression.php · IdentifierExpression.php · Postgres.php
  • 近接する修正済み項目: CVE-2026-79752 ensureSimpleString()
  • 同一ピン: cakephp-window-sqli · cakephp-attachment-crlf · cakephp-cache-unserialize
  • CWE-89

ライセンス

GNU Affero GPL v3.0。LICENSE を参照してください。ループバックラボ専用です。保証はありません。

ツールをダウンロード