Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cakephp-collate-sqli — CakePHP 5.4.2 — высокий уровень — удалённый — SQLi — COLLATE collation является необработанным фрагментом SQL | Kitploit
Инструменты/GitHubGitHub/abraxas/cakephp-collate-sqli
Сканеры уязвимостейАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеБезопасность Баз Данных
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 — высокий уровень — удалённый — SQLi — COLLATE collation является необработанным фрагментом SQL

Репозиторий
3 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

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 привязывает строковое значение и конкатенирует collation. IdentifierExpression делает то же самое. Здесь нет ensureSimpleString. В Postgres quoteIdentifier — это '"' . trim($collation, '"') . '"', поэтому встроенная кавычка закрывает CAST раньше времени.

Приложение, которое передаёт collation из запроса/локали в new StringExpression($term, $collation), помещает эту строку в COLLATE. Значение остаётся привязанным. Collation — нет.

IDCVE пока нет
КлассSQLi
ДоступУдалённый (приложение, передающее collation/локаль в 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)
Аутентификацияприложение, передающее collation/локаль в эти конструкторы
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Требуется приложение, которое передаёт collation из пользовательских данных/локали в эти конструкторы. Стандартный cakephp/app сам по себе не предоставляет collation в публичной форме.

ПривилегияМетод / sinkТипДоказано в лаборатории или выведено
Внедрить SQL после COLLATEStringExpression::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-оракул
Негативный контрольcollation CЗакрытоДоказано в лаборатории. Результат x, свидетеля нет, скомпилировано COLLATE "C"

Закрыто на этом остатке: привязанное строковое значение (:c0 остаётся литералом x); collation, которое прошло бы ensureSimpleString (^[a-zA-Z0-9]+$), — это не данная полезная нагрузка. Это не неаутентифицированный RCE на скелетном приложении. Это не шелл.

Другие остатки того же пина: window SQLi, attachment CRLF, cache unserialize.

Как я это нашёл

Я зафиксировал 5.4.2 после заметок о FunctionsBuilder / filename=. Десять поисков. Проход по оставшимся 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 уже выполнился здесь (он не выполнялся); обратный шелл. Театр.

Лаборатория

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() (или белый список collation) для аргумента collation. 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. Только лаборатория на loopback. Без гарантий.

Скачать инструмент