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

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

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

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

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

Категории

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

phpmyadmin-vqb-xss

phpMyAdmin 5.2.3 — высокий — удалённый — XSS — Designer Visual Query Builder

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

Популярное

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

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

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

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

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

Abraxas Labs - phpmyadmin-vqb-xss

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

phpmyadmin-vqb-xss

Класс: Stored XSS Достижимость: Удалённая

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

js/src/designer/history.js строит историю визуальных запросов через innerHTML. Имена столбцов проходят через $('<div/>').text(...).html(). Имена таблиц — нет. TableName по-прежнему допускает < и >. Учётная запись с низкими привилегиями и правом CREATE TABLE на общей базе данных внедряет HTML-идентификатор. Когда пользователь с более высокими привилегиями открывает Designer, getTableName() уже находится на странице, и DesignerHistory.display() записывает его в #ab.

Stored XSS в origin phpMyAdmin. Тот же класс, что и PMASA-2025-1, но другая функция. Заголовки Check-tables были экранированы. Этот путь — нет.

IDCVE пока нет
КлассStored XSS
ДостижимостьУдалённая (аутентифицированный CREATE TABLE; жертва открывает Designer)
CWECWE-79
CVSSHigh: 8.0 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
ПродуктphpMyAdmin
Затронуто5.2.3 тег RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Аутентификацияаутентифицированная. Атакующему нужно право CREATE TABLE на базе данных, которую жертва открывает в Designer
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

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

Внедрить HTML-имя таблицы, а затем дождаться, пока пользователь с более высокими привилегиями откроет Designer на этой базе данных и отрисует историю визуальных запросов.

ПривилегияМетод / sinkРазведка / целостность / доступностьДоказано в лаборатории или выведено
Внедрение разметки в origin phpMyAdminDesignerHistory.display() конкатенирует getTab() в innerHTML #abЦелостность origin жертвыДоказано в лаборатории. Живой history.js на phpmyadmin:5.2.3. <h3> содержал <i id="pma-vqb">
Выход за пределы атрибута table_name в designerdatabase_tables.twig small_tab_pref_1 использует designerTable.getTableName()Разведка сырого имени MySQL в DOM DesignerДоказано в лаборатории, читается как сырой идентификатор
Чтение cookie сессии жертвы и CSRF tokenСкрипт того же origin после отрисовки историиРазведка сессии PMA жертвыВыведено из stored XSS в origin PMA. В этой лаборатории используется маркер <i>, а не скрипт
Выполнение SQL, управление пользователями, экспорт от имени учётной записи MySQL жертвыPOST /sql, /server/privileges, экспорт с токеномЦелостность всего, к чему имеет доступ эта учётная запись MySQLВыведено. Тот же класс воздействия, что и PMASA-2025-1
Изменение 2FA / userconfigPOST /config/set от имени жертвыЦелостность хранилища настроек жертвыВыведено. Смежный остаток, не эта лаборатория

Закрыто в этом остатке: неаутентифицированный доступ, OS RCE и путь кнопки OK в VQB. .small_tab_pref_click_opt предварительно экранирует table_name, и Twig автоматически экранирует его снова, поэтому этот клик в настоящее время передаёт сущности в getTab(). Это не исправление history.js. Ячейки столбцов остаются текстово экранированными (c<b id=pma-col>y, узла <b id="pma-col"> нет).

Тот же пин: WebAuthn CustomServer leftover.

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

Я зафиксировал phpMyAdmin RELEASE_5_2_3. PMASA-2025-1/2/3 уже присутствуют в 5.2.2. Designer по-прежнему собирает HTML истории VQB вручную.

js/src/designer/history.js (поставляется как js/dist/designer/history.js):

temp = historyArray[i].getTab();
str += '<h3 class="tiger"><a href="#">' + temp + '</a></h3>';
// ...
'<td width="175" style="padding-left: 5px">' + $('<div/>').text(historyArray[i].getColumnName()).html() + '<td>';

libraries/classes/Dbal/TableName.php проверяет только непустоту, максимум 64, отсутствие завершающего пробела. < и > допустимы. MySQL принимает их в заключённом в кавычки идентификаторе.

templates/database/designer/database_tables.twig копирует designerTable.getTableName() в table_name на .small_tab_pref_1. Ячейка опции VQB использует предварительно экранированную копию того же имени.

Уже зафиксированные ошибочные пути: трактовка дважды экранированного атрибута кнопки-опции как исправления (это не так — small_tab_pref_1 по-прежнему раскрывает сырое имя, а history.js является sink); трактовка хелпера столбцов как покрывающего имена таблиц; заявление о неаутентифицированном XSS; reverse shell. Театр.

Лаборатория

python3 phpmyadmin-vqb-xss-Abraxas-Labs.py
# or: cd lab && ./run.sh

Цель только http://127.0.0.1:19250. Образы phpmyadmin:5.2.3 и mysql:8.0. Compose-проект phpmyadmin-vqb-xss. Playwright Chromium в сервисе poc. Стек разбирается после запуска.

Два пользователя, общая shareddb. Низкопривилегированный creator выполняет CREATE TABLE \tx` (`cy` INT). Высокопривилегированный victimвходит в phpMyAdmin и открывает Designer сquery=1. Живой history.js — это копия из контейнера (h3-unescaped=yes, хелпер столбцов присутствует). Chromium вызывает DesignerHistory.display()с именем таблицы изgetTableName()` на странице.

Результат: innerHTML #ab h3.tiger равен <a href="#">t<i id="pma-vqb">x</i></a>. Текст td столбца — c<b id=pma-col>y без узла b#pma-col.

SUCCESS phpmyadmin-vqb-xss h3-markup=yes col-escaped=yes how=live PMA-VQB-XSS-WITNESS

Исправление

Экранируйте getTab() с помощью $('<div/>').text(temp).html() или Functions.escapeHtml перед конкатенацией в <h3>. Не полагайтесь на двойное кодирование одного атрибута в Twig. Сохраните хелпер имени столбца как образец.

Ссылки

  • github.com/phpmyadmin/phpmyadmin тег RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • js/src/designer/history.js
  • libraries/classes/Dbal/TableName.php
  • Рядом исправлено (не этот путь): PMASA-2025-1 Check-tables headings
  • Тот же пин: PMA-5.2.3-WebAuthn-2FA
  • CWE-79

Лицензия

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

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