Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cakephp-collate-sqli — CakePHP 5.4.2 - Élevé - À distance - SQLi - La collation COLLATE est un fragment SQL brut | Kitploit
Outils/GitHubGitHub/abraxas/cakephp-collate-sqli
Scanners de VulnérabilitésAnalyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionSécurité des Bases de Données
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 - Élevé - À distance - SQLi - La collation COLLATE est un fragment SQL brut

Voir le dépôt
il y a 3 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - cakephp-collate-sqli

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

cakephp-collate-sqli

Classe : SQLi Portée : Distante

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql lie la valeur de chaîne et concatène la collation. IdentifierExpression fait de même. Il n'y a pas de ensureSimpleString. Le quoteIdentifier de Postgres est '"' . trim($collation, '"') . '"', donc un guillemet intégré ferme CAST prématurément.

Une application qui transmet la collation de la requête/locale dans new StringExpression($term, $collation) place cette chaîne dans COLLATE. La valeur reste liée. La collation, non.

IDpas encore de CVE
ClasseSQLi
PortéeDistante (application qui transmet la collation/locale dans StringExpression / IdentifierExpression)
CWECWE-89
CVSSÉlevé : 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduitCakePHP (cakephp/database)
Affecté5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Authapplication qui transmet la collation/locale dans ces constructeurs
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Nécessite une application qui transmet la collation utilisateur/locale dans ces constructeurs. Le cakephp/app standard n'expose pas la collation sur un formulaire public en soi.

PrivilègeMéthode / sinkTypeProuvé en lab ou déduit
Injecter du SQL après COLLATEStringExpression::sql concatène $this->collationIntégrité du SQL compiléProuvé en lab. Le SQL brut contient la charge utile non liée
Même injection sur les identifiantsIdentifierExpression note COLLATE <payload>Intégrité du SQL compiléProuvé en lab. id_raw_sql contient la charge utile
Sortir du wrap Postgres "..."quoteIdentifier = '"' . trim($collation, '"') . '"'Intégrité du SQL compiléProuvé en lab. Le SQL compilé est COLLATE "C" AS text)) || (SELECT ...
Exécuter l'évasion et lire une autre tableCAST(... ) || (SELECT note FROM lab_secret ...)Reconnaissance de la baseProuvé en lab. Résultat xCAKEPHP-COLLATE-SQLI-WITNESS, aucune erreur d'exécution
Modifier des lignes / plus de SQL avec le rôle de connexionMême injectionIntégrité de la baseDéduit. Le lab est un oracle SELECT
Contrôle négatifcollation CFerméProuvé en lab. Résultat x, aucun témoin, compilé COLLATE "C"

Fermé sur ce reliquat : valeur de chaîne liée (:c0 reste le littéral x) ; une collation qui passerait ensureSimpleString (^[a-zA-Z0-9]+$) n'est pas cette charge utile. Pas de RCE non authentifiée sur une application squelette. Pas de shell.

Autres reliquats du même pin : window SQLi, attachment CRLF, cache unserialize.

Comment je l'ai trouvé

J'ai épinglé 5.4.2 après les notes FunctionsBuilder / filename=. Dix chasses. La passe SQLi restante est celle-ci. StringExpression::sql :

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

Le quoteIdentifier de Postgres entoure de guillemets ASCII et fait trim($collation, '"'). Un " intégré ferme l'identifiant. -- mange le fermant restant que Cake ajoute encore.

Fausses pistes déjà consignées : SQLite comme seul driver (la concaténation est réelle, l'évasion du wrap est Postgres) ; traiter la valeur liée comme l'injection ; prétendre que ensureSimpleString s'était déjà exécuté ici (ce n'était pas le cas) ; un reverse shell. Du théâtre.

Lab

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

ou

cd lab
./run.sh

Cible uniquement http://127.0.0.1:19450. cakephp/database 5.4.2 plus Postgres 16. Une petite application transmet ?collation= dans StringExpression / IdentifierExpression et exécute CAST(... AS text). La table secrète contient le témoin.

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

Le correctif

ensureSimpleString() (ou une liste blanche de collations) sur l'argument de collation. Postgres doit citer correctement les identifiants, pas faire trim plus wrap.

Références

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • StringExpression.php · IdentifierExpression.php · Postgres.php
  • Correctif proche : CVE-2026-79752 ensureSimpleString()
  • Même pin : cakephp-window-sqli · cakephp-attachment-crlf · cakephp-cache-unserialize
  • CWE-89

Licence

GNU Affero GPL v3.0. Voir LICENSE. Lab en boucle locale uniquement. Aucune garantie.

Télécharger l’outil