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
漏洞扫描器漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试数据库安全
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 - 高危 - 远程 - SQLi - COLLATE 排序规则是原始 SQL 片段

查看仓库
4天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - cakephp-collate-sqli

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

cakephp-collate-sqli

类别: SQLi 可达性: 远程

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql 绑定字符串值并拼接排序规则。IdentifierExpression 也是如此。没有 ensureSimpleString。Postgres 的 quoteIdentifier 是 '"' . trim($collation, '"') . '"',因此嵌入的引号会提前闭合 CAST。

一个将请求/区域设置的排序规则转发到 new StringExpression($term, $collation) 的应用,会将该字符串放入 COLLATE。值保持绑定。排序规则则不会。

ID暂无 CVE
类别SQLi
可达性远程(将排序规则/区域设置转发到 StringExpression / IdentifierExpression 的应用)
CWECWE-89
CVSS高危:8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
产品CakePHP (cakephp/database)
受影响版本5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
认证将排序规则/区域设置转发到这些构造函数中的应用
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

需要一个将用户/区域设置的排序规则传入这些构造函数的应用。原版 cakephp/app 本身不会在公开表单上暴露排序规则。

权限方法 / 汇聚点类型实验验证或推断
在 COLLATE 之后拼接 SQLStringExpression::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 ...)数据库侦察实验验证。结果为 xCAKEPHP-COLLATE-SQLI-WITNESS,无执行错误
以连接角色修改行 / 执行更多 SQL同一注入数据库完整性推断。实验环境为 SELECT 预言机
阴性对照排序规则 C已闭合实验验证。结果为 x,无见证,编译后为 COLLATE "C"

本次遗留问题已闭合:绑定的字符串值(:c0 保持字面量 x);能通过 ensureSimpleString(^[a-zA-Z0-9]+$)的排序规则不是此载荷。不是对骨架应用的未认证 RCE。不是 shell。

同一版本遗留问题:window SQLi、attachment CRLF、cache unserialize。

我是如何发现的

在 FunctionsBuilder / filename= 的笔记之后,我锁定了 5.4.2。十次搜寻。剩余 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 已在此处运行(实际没有);反弹 shell。都是表演。

实验环境

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)。秘密表保存见证。

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。仅限回环实验环境。无担保。

下载工具