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

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

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

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

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

Категории

Все категории
Loading categories
mysql-mysqldump-show-tables-overflow — MySQL Community Server 26.7.0 — высокий уровень — переполнение стека mysqldump SHOW TABLES — аварийный дамп UID | Kitploit
Инструменты/GitHubGitHub/abraxas/mysql-mysqldump-show-tables-overflow
Анализ уязвимостейЭксплуатацияФаззингКриптографияТестирование на ПроникновениеАнализ Бинарных Файлов
GitHubabraxas/mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

MySQL Community Server 26.7.0 — высокий уровень — переполнение стека mysqldump SHOW TABLES — аварийный дамп UID

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

Популярное

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

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

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

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

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

Abraxas Labs - mysql-mysqldump-show-tables-overflow

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

Класс: Crash Достижимость: Remote

MySQL Community Server mysqldump 26.7.0 (06a5c1c) - Oracle

Стандартный mysqldump копирует имена из SHOW TABLES без ограничения NAME_LEN. getTableName возвращает сырой mysql_fetch_row. dump_all_tables_in_db выполняет my_stpcpy этой строки в hash_key[2*NAME_LEN+2], а quote_name записывает её в 387-байтовый буфер стека без ограничения. Враждебный сервер, отвечающий именем таблицы длиннее 192 байт, приводит к падению процесса dump UID.

Настоящий mysqld не выдаёт идентификаторы такой длины. Остаётся доверие клиента к протоколу.

IDCVE пока нет
КлассCrash (SIGSEGV клиента; RCE не продемонстрирован)
ДостижимостьRemote (жертва запускает mysqldump против MySQL атакующего; UI:R)
CWECWE-120, CWE-121
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
ПродуктMySQL Community Server mysqldump
Затронуто26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
Аутентификацияжертва запускает стандартный mysqldump против MySQL атакующего
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1. Свидетельство падения. Без RIP-полезной нагрузки.

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

Поднять сервер с протоколом MySQL. Завершить рукопожатие. Ответить на сессионные SET. Когда клиент отправляет show tables, вернуть одну строку, имя в которой длиной в десятки килобайт.

Оператор, направивший mysqldump testdb на этот хост, переполняет буфер стека в процессе dump. В лаборатории на mysqldump Ver 26.7.0 это SIGSEGV. Надёжное управление указателем инструкций не входит в этот пакет. Падение — входит.

Та же модель жертвы, что и у клиента резервного копирования, направленного на вредоносный сервер. lock_tables включён по умолчанию через --opt. Переполнение происходит в том первом цикле SHOW TABLES.

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

Я провёл тридцать один поиск по исходникам https://github.com/mysql/mysql-server тега https://github.com/mysql/mysql-server/tree/mysql-26.7.0. Неопубликованные Crit/High в стандартном mysqld дали пустой результат. Строки CPU High Server за июль 2026 закрыты на этом пине. Клиентские инструменты оказались остаточным классом, той же формы, что и PostgreSQL pg_basebackup, идущий по враждебному пути.

static char *getTableName(int reset) {
  static MYSQL_RES *res = nullptr;
  MYSQL_ROW row;
  if (!res) {
    if (!(res = mysql_list_tables(mysql, NullS))) return (nullptr);
  }
  if ((row = mysql_fetch_row(res))) return ((char *)row[0]);
static char *quote_name(char *name, char *buff, bool force) {
  char *to = buff;
  const char qtype = ansi_quotes_mode ? '"' : '`';
  if (!force && !opt_quoted && !test_if_special_chars(name)) return name;
  *to++ = qtype;
  while (*name) {
    if (*name == qtype) *to++ = qtype;
    *to++ = *name++;
  }

NAME_LEN равен 64 * 3 = 192. hash_key — 386 байт. quote_name в dump_table пишет в table_buff[NAME_LEN+3].

Уже зафиксированные ошибочные пути: рассмотрение настоящего mysqld как оракула (он не выдаст идентификатор длиной 193 байта); имя в 4 КиБ, поглощённое real_columns[MAX_FIELDS] в том же фрейме, что и hash_key; сборка ASan из полного дерева сервера; называние падения управлением указателем инструкций.

Лаборатория

cd lab
./run.sh

Образ mysql:26.7.0. Враждебный заглушечный сервер в compose stub:3306 (контроль, таблица t) и stub:3307 (переполнение, имя 64 КиБ плюс свидетель). Опубликованы 127.0.0.1:18600 / 18601. Привяжите к loopback.

control-rc=2 control-signal=0
overflow-rc=139 overflow-signal=SIGSEGV
SUCCESS mysql-mysqldump-show-tables-overflow ... MYSQL-DUMP-SHOW-TABLES-OVERFLOW-WITNESS

Контроль печатает заголовок dump 26.7.0 и завершается с кодом 2 на SQL 1146. Переполнение умирает сразу после show tables. Никакого LOCK TABLES в этом соединении.

Исправление

Ограничить getTableName значением NAME_LEN. Дать quote_name длину буфера и запретить запись за её пределами. my_stpcpy в hash_key должна быть копированием с ограничением. Враждебное имя из SHOW TABLES — не таблица.

Ссылки

  • https://github.com/mysql/mysql-server тег https://github.com/mysql/mysql-server/tree/mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/client/mysqldump.cc getTableName, quote_name, dump_all_tables_in_db
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/include/mysql_com.h NAME_LEN
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/libmysql/libmysql.cc mysql_list_tables
Скачать инструмент