Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cakephp-collate-sqli — CakePHP 5.4.2 - Alto - Remoto - SQLi - COLLATE collation è un frammento SQL grezzo | Kitploit
Strumenti/GitHubGitHub/abraxas/cakephp-collate-sqli
Scanner di VulnerabilitàAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSicurezza dei Database
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 - Alto - Remoto - SQLi - COLLATE collation è un frammento SQL grezzo

Vedi Repository
4 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - cakephp-collate-sqli

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

cakephp-collate-sqli

Classe: SQLi Reach: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql esegue il binding del valore stringa e concatena la collation. IdentifierExpression fa lo stesso. Non esiste ensureSimpleString. In Postgres quoteIdentifier è '"' . trim($collation, '"') . '"', quindi una virgoletta incorporata chiude CAST in anticipo.

Un'app che inoltra la collation di request/locale in new StringExpression($term, $collation) inserisce quella stringa in COLLATE. Il valore resta con binding. La collation no.

IDnessuna CVE al momento
ClasseSQLi
ReachRemoto (app che inoltra collation/locale in 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
ProdottoCakePHP (cakephp/database)
Affected5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Authapplicazione che inoltra collation/locale in quei costruttori
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Richiede un'applicazione che passi la collation di utente/locale in quei costruttori. Il cakephp/app standard non espone la collation su un form pubblico di per sé.

PrivilegioMetodo / sinkTipoProvato in lab o dedotto
Iniettare SQL dopo COLLATEStringExpression::sql concatena $this->collationIntegrità dell'SQL compilatoProvato in lab. L'SQL raw contiene il payload senza binding
Stessa iniezione sugli identificatoriIdentifierExpression note COLLATE <payload>Integrità dell'SQL compilatoProvato in lab. id_raw_sql contiene il payload
Uscire dal wrapping "..." di PostgresquoteIdentifier = '"' . trim($collation, '"') . '"'Integrità dell'SQL compilatoProvato in lab. L'SQL compilato è COLLATE "C" AS text)) || (SELECT ...
Eseguire il breakout e leggere un'altra tabellaCAST(... ) || (SELECT note FROM lab_secret ...)Ricognizione del DBProvato in lab. Risultato xCAKEPHP-COLLATE-SQLI-WITNESS, nessun errore di esecuzione
Modificare righe / altro SQL con il ruolo della connessioneStessa iniezioneIntegrità del DBDedotto. Il lab è un oracolo SELECT
Controllo negativocollation CChiusoProvato in lab. Risultato x, nessun witness, compilato COLLATE "C"

Chiuso su questo residuo: valore stringa con binding (:c0 resta il letterale x); una collation che passerebbe ensureSimpleString (^[a-zA-Z0-9]+$) non è questo payload. Non è RCE non autenticato su un'app skeleton. Non è una shell.

Altri residui dello stesso pin: window SQLi, attachment CRLF, cache unserialize.

Come l'ho trovato

Ho fissato 5.4.2 dopo le note su FunctionsBuilder / filename=. Dieci ricerche. Il passaggio sull'SQLi residuo è questo. StringExpression::sql:

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

In Postgres quoteIdentifier avvolge con virgolette ASCII e trim($collation, '"'). Una " incorporata chiude l'identificatore. -- mangia il chiudente residuo che Cake aggiunge comunque.

Vicoli ciechi già registrati: SQLite come unico driver (la concatenazione è reale, il breakout del wrapping è Postgres); trattare il valore con binding come l'iniezione; sostenere che ensureSimpleString fosse già stato eseguito qui (non lo era); una reverse shell. Teatro.

Lab

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

oppure

cd lab
./run.sh

Target solo http://127.0.0.1:19450. cakephp/database 5.4.2 più Postgres 16. Una piccola app inoltra ?collation= in StringExpression / IdentifierExpression ed esegue CAST(... AS text). La tabella segreta contiene il witness.

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

La correzione

ensureSimpleString() (o una allowlist di collation) sull'argomento collation. Postgres deve quotare correttamente gli identificatori, non trim più wrapping.

Riferimenti

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • StringExpression.php · IdentifierExpression.php · Postgres.php
  • Correlato già patchato: CVE-2026-79752 ensureSimpleString()
  • Stesso pin: cakephp-window-sqli · cakephp-attachment-crlf · cakephp-cache-unserialize
  • CWE-89

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.

Scarica lo strumento