Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cakephp-collate-sqli — CakePHP 5.4.2 – Hoch – Remote – SQLi – COLLATE-Kollation ist ein rohes SQL-Fragment | Kitploit
Tools/GitHubGitHub/abraxas/cakephp-collate-sqli
SchwachstellenscannerSchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsDatenbanksicherheit
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 – Hoch – Remote – SQLi – COLLATE-Kollation ist ein rohes SQL-Fragment

Repository anzeigen
vor 4 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - cakephp-collate-sqli

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

cakephp-collate-sqli

Klasse: SQLi Reichweite: Remote

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql bindet den String-Wert und konkateniert die Collation. IdentifierExpression macht dasselbe. Es gibt kein ensureSimpleString. Postgres quoteIdentifier ist '"' . trim($collation, '"') . '"', sodass ein eingebettetes Anführungszeichen CAST vorzeitig schließt.

Eine App, die Request-/Locale-Collation in new StringExpression($term, $collation) weiterleitet, setzt diesen String in COLLATE. Der Wert bleibt gebunden. Die Collation nicht.

IDnoch keine CVE
KlasseSQLi
ReichweiteRemote (App, die Collation/Locale in StringExpression / IdentifierExpression weiterleitet)
CWECWE-89
CVSSHoch: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduktCakePHP (cakephp/database)
Betroffen5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
AuthAnwendung, die Collation/Locale in diese Konstruktoren weiterleitet
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Erfordert eine Anwendung, die Benutzer-/Locale-Collation in diese Konstruktoren übergibt. Das Standard-cakephp/app stellt Collation nicht von sich aus in einem öffentlichen Formular bereit.

BerechtigungMethode / SinkArtLab-belegt oder abgeleitet
SQL nach COLLATE einschleusenStringExpression::sql konkateniert $this->collationIntegrität des kompilierten SQLLab-belegt. Rohes SQL enthält die Payload ungebunden
Gleiches Einschleusen bei IdentifikatorenIdentifierExpression note COLLATE <payload>Integrität des kompilierten SQLLab-belegt. id_raw_sql enthält die Payload
Aus der Postgres-"..."-Umhüllung ausbrechenquoteIdentifier = '"' . trim($collation, '"') . '"'Integrität des kompilierten SQLLab-belegt. Kompiliertes SQL ist COLLATE "C" AS text)) || (SELECT ...
Den Ausbruch ausführen und eine andere Tabelle lesenCAST(... ) || (SELECT note FROM lab_secret ...)Recon der DBLab-belegt. Ergebnis xCAKEPHP-COLLATE-SQLI-WITNESS, kein Exec-Fehler
Zeilen ändern / mehr SQL mit der VerbindungsrolleDieselbe InjectionIntegrität der DBAbgeleitet. Lab ist ein SELECT-Oracle
NegativkontrolleCollation CGeschlossenLab-belegt. Ergebnis x, kein Witness, kompiliert COLLATE "C"

Geschlossen bei diesem Überbleibsel: gebundener String-Wert (:c0 bleibt das Literal x); eine Collation, die ensureSimpleString (^[a-zA-Z0-9]+$) passieren würde, ist nicht diese Payload. Kein unauthentifiziertes RCE auf einer Skeleton-App. Keine Shell.

Gleiche Pin-Überbleibsel: window SQLi, attachment CRLF, cache unserialize.

Wie ich es gefunden habe

Ich habe 5.4.2 nach den FunctionsBuilder-/filename=-Notizen gepinnt. Zehn Jagden. Der Remaining-SQLi-Durchgang ist dieser. StringExpression::sql:

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

Postgres quoteIdentifier umhüllt mit ASCII-Anführungszeichen und trim($collation, '"'). Ein eingebettetes " schließt den Identifikator. -- frisst den übrig gebliebenen Closer, den Cake weiterhin anhängt.

Bereits festgehaltene Irrwege: SQLite als einziger Treiber (Concat ist real, der Wrap-Breakout ist Postgres); den gebundenen Wert als die Injection behandeln; behaupten, ensureSimpleString sei hier bereits gelaufen (ist es nicht); eine Reverse Shell. Theater.

Lab

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

oder

cd lab
./run.sh

Ziel nur http://127.0.0.1:19450. cakephp/database 5.4.2 plus Postgres 16. Winzige App leitet ?collation= in StringExpression / IdentifierExpression weiter und führt CAST(... AS text) aus. Secret-Tabelle enthält den Witness.

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

Der Fix

ensureSimpleString() (oder eine Collation-Allowlist) auf das Collation-Argument. Postgres muss Identifikatoren korrekt quoten, nicht trim plus Umhüllung.

Referenzen

  • github.com/cakephp/cakephp Tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • StringExpression.php · IdentifierExpression.php · Postgres.php
  • In der Nähe gepatcht: CVE-2026-79752 ensureSimpleString()
  • Gleicher Pin: cakephp-window-sqli · cakephp-attachment-crlf · cakephp-cache-unserialize
  • CWE-89

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen