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

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

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

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

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

Категории

Все категории
Loading categories
phpmyadmin-csrf-sql — phpMyAdmin 5.2.3 — высокий — удалённый — CSRF — удаление токена на /sql | Kitploit
Инструменты/GitHubGitHub/abraxas/phpmyadmin-csrf-sql
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

phpMyAdmin 5.2.3 — высокий — удалённый — CSRF — удаление токена на /sql

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

Популярное

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

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

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

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

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

Abraxas Labs - phpmyadmin-csrf-sql

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-csrf-sql

Разбор: https://abraxaslabs.tech/research/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

Класс: CSRF Доступ: Удалённый

phpMyAdmin 5.2.3 (тег RELEASE_5_2_3, коммит 962857e). Common.php собирает PSR-7 запрос из глобальных переменных до вызова checkTokenRequestParam. При несовпадении Sanitize::removeRequestVars очищает $_POST и $_GET, но не этот снимок. Затем $sql_query копируется из $request->getParsedBodyParam('sql_query'). AJAX POST-запросы прерываются при несовпадении токена. Не-AJAX POST-запросы продолжаются. SqlController предпочитает очищенный $_POST['sql_query'], а иначе сохраняет глобальную переменную.

Достаточно жертвы с сессионной cookie phpMyAdmin. Отправьте POST на index.php?route=/sql с sql_query и без валидного токена, а также без ajax_request. SELECT выполнится от имени этого пользователя MySQL. Значение по умолчанию CookieSameSite=Strict в 5.2.3 блокирует многие кросс-сайтовые браузеры. Same-site, Lax, None или HTTP-аутентификация всё равно срабатывают. В любом случае это сломанная защита от CSRF.

IDCVE пока нет
КлассCSRF
ДоступУдалённый. Значение по умолчанию CookieSameSite=Strict блокирует многие кросс-сайтовые браузеры. Same-site / Lax / None / HTTP-аутентификация остаются.
CWECWE-352
CVSSВысокий: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
ПродуктphpMyAdmin
Затронуто5.2.3 тег RELEASE_5_2_3 (962857e)
АутентификацияСессионная cookie жертвы phpMyAdmin (или HTTP-аутентификация). Без валидного CSRF-токена.
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:19240

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

Любой, кто может заставить браузер жертвы отправить POST в phpMyAdmin без ajax_request, может выполнить SQL от имени этого пользователя MySQL.

ПривилегияМетод / путьДоказано в лаборатории или выведено
Выполнить SQL атакующего от имени учётной записи MySQL жертвы (целостность + разведка этого SQL-хоста)POST index.php?route=/sql sql_query=... db=... без token, без ajax_requestДоказано в лаборатории. Тело ответа содержало PMA-CSRF-SQL-WITNESS. General log показал SELECT от имени appuser
Прервать тот же обработчик при AJAXТот же POST с ajax_request=1Доказано в лаборатории. Token mismatch. Строка-маркер INSERT отсутствует. General log не выполнил этот INSERT
Обойти обработчики, которые читают только очищенный $_POSTPOST /database/structure/drop-table без токенаДоказано в лаборатории. keepme всё ещё присутствует
Та же брешь при экспорте (SaveDir), DROP/TRUNCATE партиций, блокировке учётной записи, /config/set, создании pmadbЛюбой обработчик, читающий тело PSR-7 после очисткиВыведено. Не проверялось

Закрыто в этой лаборатории: неаутентифицированный PMA (сначала требуется вход по cookie), AJAX-маршруты (они завершаются при несовпадении), drop-table без токена, OS shell. Значение по умолчанию Strict SameSite означает, что классическая кросс-сайтовая форма часто не отправит cookie; оставшийся случай всё равно является проваленной проверкой CSRF при same-site и при развёртываниях с Lax/None.

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

Восемь параллельных поисков по исходникам RELEASE_5_2_3. Common.php создаёт $request = createFromGlobals() до checkTokenRequestParam(). При несовпадении Sanitize::removeRequestVars() очищает только $_POST/$_GET. Не-AJAX продолжается. SqlController использует глобальную $sql_query, если $_POST пуст. Маршрут GET|POST /sql.

Ошибочные направления: считать AJAX /sql остатком (он прерывается из-за несовпадения токена); считать drop-table остатком (этот обработчик только читает очищенный $_POST); считать Strict SameSite по умолчанию за «CSRF закрыт» (защита по-прежнему сломана; same-site / Lax / None остаются).

Лаборатория

python3 phpmyadmin-csrf-sql-Abraxas-Labs.py

или

cd lab
./run.sh

Только loopback: http://127.0.0.1:19240. Образы phpmyadmin:5.2.3 и mysql:8.0. Compose-проект phpmyadmin-csrf-sql. PoC представляет собой same-site loopback POST (Strict SameSite всё равно отправляет cookie). Свидетель PMA-CSRF-SQL-WITNESS.

SUCCESS phpmyadmin-csrf-sql sql-ran=yes ajax-abort=yes drop-held=yes PMA-CSRF-SQL-WITNESS

Исправление

При несовпадении замените запрос на пустое тело или отклоните все POST-запросы, а не только AJAX. Не копируйте sql_query из устаревшего запроса. Завершайте с отказом, как при выходе из системы.

Ссылки

  • github.com/phpmyadmin/phpmyadmin тег RELEASE_5_2_3 (962857e)
  • libraries/classes/Common.php снимок запроса до удаления токена
  • Sanitize::removeRequestVars очищает только $_POST/$_GET
  • SqlController глобальная $sql_query
  • Остатки того же пина: phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-setup-validate
  • CWE-352

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лаборатории на loopback. Без гарантий.

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