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

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

Популярное

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

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

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

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

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

Abraxas Labs - phpmyadmin-csrf-sql

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  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 остатком (он прерывается с Token mismatch); считать 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-лаборатория. Без гарантий.

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