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フラグメントです

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - cakephp-collate-sqli

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

cakephp-collate-sqli

Class: SQLi Reach: Remote

CakePHP 5.4.2 (887b641) - Cake Software Foundation

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

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

IDCVE 未割当
ClassSQLi
ReachRemote (照合順序/ロケールを 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
ProductCakePHP (cakephp/database)
Affected5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Auth照合順序/ロケールをこれらのコンストラクタに転送するアプリケーション
LicenseGNU Affero GPL v3.0
Lab127.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、witness なし、コンパイル結果 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 のみをドライバとする (連結は実在するが、ラップ脱出は 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) を実行します。シークレットテーブルに witness が保持されています。

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

修正

照合順序引数に ensureSimpleString() (または照合順序の許可リスト) を適用します。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 を参照。ループバックラボのみ。無保証。

ツールをダウンロード