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
18il y a 9 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

Write-up : https://abraxaslabs.tech/research/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 le 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 par lui-même.

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
S'échapper de l'encapsulation 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 BDProuvé 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 BDDé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 point restant : la 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 points restants 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 sur FunctionsBuilder / filename=. Dix chasses. La passe sur le SQLi restant est celle-ci. StringExpression::sql :

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

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

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

Lab

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

ou

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:19450. cakephp/database 5.4.2 avec Postgres 16. Une petite application transmet ?collation= dans StringExpression / IdentifierExpression et exécute CAST(... AS text). Une 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 d'autorisation de collations) sur l'argument de collation. Postgres doit citer correctement les identifiants, et non se contenter d'un trim suivi d'un encadrement.

Références

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

Licence

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

Télécharger l’outil