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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/abraxas/phpmyadmin-importldi
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

phpMyAdmin 5.2.3 — высокий — удалённый — SQLi — ImportLdi TERMINATED BY leftover

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

Популярное

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

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

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

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

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

Abraxas Labs - phpmyadmin-importldi

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

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

phpmyadmin-importldi

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

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

ImportLdi.php собирает LOAD DATA с FIELDS/LINES TERMINATED BY из POST-параметров ldi_terminated и ldi_new_line. Эти две строки конкатенируются в SQL в одинарных кавычках. ldi_enclosed и ldi_escaped проходят через escapeString. phpMyAdmin устанавливает PMA_ENABLE_LDI на /import, поэтому MYSQLI_OPT_LOCAL_INFILE включён.

Аутентифицированный пользователь отправляет POST format=ldi с кавычкой в ldi_terminated. Сформированный LOAD DATA содержит сырой POST внутри TERMINATED BY. SQL-инъекция в пользовательское соединение, а не в control user.

IDCVE пока нет
КлассSQLi
ДоступУдалённый (аутентифицированный вход по cookie; импорт таблицы, формат ldi)
CWECWE-89
CVSSСредний: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
ПродуктphpMyAdmin
Затронуто5.2.3 тег RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
Аутентификацияаутентифицированный вход по cookie. Импорт таблицы, формат ldi
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

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

Аутентифицированный пользователь phpMyAdmin, имеющий доступ к импорту таблицы, может внедрить SQL в LOAD DATA ... TERMINATED BY в своём соединении с MySQL.

ПривилегияМетод / точка внедренияРазведка / целостность / доступностьДоказано в лаборатории или выведено
Разорвать литерал FIELDS TERMINATED BYPOST index.php?route=/import format=ldi ldi_terminated с кавычкойЦелостность формируемого PMA запросаДоказано в лаборатории. HTML-окно SQL: TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
Сохранить ENCLOSED BY в пределах строкиТот же POST, кавычка в ldi_enclosedОтрицательный контрольДоказано в лаборатории. ENCLOSED BY экранируется
Дополнительный SQL в пользовательском соединении (INTO OUTFILE / stacked, если разрешено)Та же точка внедрения после закрытия строкиЦелостность пользовательского соединенияВыведено. Лаборатория останавливается на сломанном разделителе. По умолчанию mysqli::query выполняет один запрос
Чтение/запись файлов на стороне MySQLТот же LOAD DATA, если у учётной записи есть FILE или LOCAL INFILE к веб-серверуЦелостность файлов, доступных mysqldВыведено. Здесь не предоставлено. Не заявляется

Закрыто в этой лаборатории: неаутентифицированный доступ, control user / pmadb, OS include LFI и чтение/запись, ограниченные FILE. Аутентифицированный пользователь уже имеет SQL-окно; эта недоработка — неэкранированный разделитель внутри запроса, который PMA формирует для него.

Тот же пин: остаток WebAuthn CustomServer.

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

Я зафиксировал phpMyAdmin RELEASE_5_2_3. Плагины импорта, которые вручную собирают LOAD DATA, — это аудит кавычек. Два из четырёх полей разделителей экранировались. Два — нет:

$sql .= ' FIELDS TERMINATED BY \'' . $ldi_terminated . '\'';
...
$sql .= ' LINES TERMINATED BY \'' . $ldi_new_line . '\'';

ldi_enclosed / ldi_escaped вызывают $dbi->escapeString. Common.php устанавливает PMA_ENABLE_LDI на /import + format=ldi. Маршруты GET|POST /import и GET|POST /table/import.

Уже зафиксированные ошибочные повороты: заявление об LFI без гранта FILE; трактовка SQL-поля как находки (остаток — это неэкранированный разделитель, который конкатенирует PMA); заявление о control-user / pmadb; reverse shell. Театр.

Лаборатория

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

Цель — только http://127.0.0.1:19290. Образы phpmyadmin:5.2.3 и mysql:8.0. Проект Compose phpmyadmin-importldi. Стек разворачивается после запуска.

Вход по cookie. POST /import с format=ldi и кавычкой в ldi_terminated. Выдан LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'. Та же кавычка в ldi_enclosedсохранена как экранированныйENCLOSED BY. Закреплённый исходник на образе 5.2.3 по-прежнему содержит '.$ldi_terminated.'и$dbi->escapeString($ldi_enclosed)`.

SUCCESS phpmyadmin-importldi pin=RELEASE_5_2_3 how=live TERMINATED-BY-raw ENCLOSED-escaped PMA-IMPORTLDI-WITNESS

Исправление

escapeString для ldi_terminated и ldi_new_line, так же как для enclosed и escaped. Приведение к int для skip_queries.

Ссылки

  • github.com/phpmyadmin/phpmyadmin тег RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Plugins/Import/ImportLdi.php
  • Тот же пин: PMA-5.2.3-WebAuthn-2FA
  • CWE-89

Лицензия

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

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