
Python CLI, эксплуатирующий CVE-2026-48907 в Joomla JCE через загрузку импорта профиля, проверяет пути к shell и открывает интерактивный командный канал на авторизованных целях.
E.L.V — Exploit Loader & Vulnerability Firmware
Утилита для исследований в области кибербезопасности, предназначенная для авторизованной оценки уязвимостей.
E.L.V CVE Research & Assessment Framework — это утилита командной строки на Python, предназначенная для контролируемых исследований в области безопасности и авторизованной оценки уязвимостей.
Предоставленная реализация содержит функциональность для:
Текущий исходный код определяет свою исследовательскую цель как:
CVE-2026-48907 Joomla! JCE Extension < 2.9.99.5 Unauthenticated RCE
Это утверждение о CVE/продукте является метаданными, предоставленными исходным кодом, и не было независимо проверено в этом README. Перед публикацией заявления о безопасности проверьте идентификатор, затронутые версии, рекомендации, затронутый компонент и информацию об устранении по доверенному источнику CVE/производителя.
Этот проект взаимодействует с удалёнными веб-приложениями, и предоставленная реализация включает функциональность, предназначенную для загрузки пользовательской серверной полезной нагрузки и связи с загруженным шеллом.
Используйте его только против систем, на которые у вас есть явное разрешение.
Не используйте этот проект для:
Для безопасной лаборатории используйте изолированную локальную среду VM/контейнера или намеренно уязвимую тренировочную цель.
| Поле | Значение |
|---|---|
| Проект | E.L.V CVE Research & Assessment Framework |
| Автор / Движок | HxN / E.L.V |
| Версия | 1.0.0 |
| Язык | Python |
| Платформа | *nix / Unix-подобные системы |
| Лицензия | GNU GPL v3 |
| Интерфейс | Командная строка |
| HTTP-клиент | requests |
| Параллелизм | ThreadPoolExecutor |
| Основное назначение | Авторизованные исследования в области безопасности и оценка |
Предоставленный исходный код elv-cve.py содержит следующие основные компоненты.
Скрипт читает локальный файл, указанный через опцию --shell.
Исходный код описывает его как пользовательский файл шелла/загрузчика и завершает работу, когда указанный файл не может быть прочитан.
Программа поддерживает два взаимоисключающих режима целей:
Для каждой цели скрипт выполняет GET-запрос к корню цели и ожидает HTTP-ответ 200 перед продолжением.
Реализация ищет в возвращённом HTML значение, связанное с CSRF, с помощью регулярных выражений.
В настоящее время реализованы два шаблона.
Скрипт формирует запрос на многочастную загрузку к:```text /index.php?option=com_jce
Запрос включает задачу импорта профиля и извлечённый токен.
### 6. Проверка путей-кандидатов
После запроса на загрузку программа проверяет несколько возможных местоположений итогового файла.
Текущий исходный код содержит следующие пути-кандидаты:```text
/tmp/
/images/
/images/stories/
/media/
Для одной цели текущая программа вызывает интерфейс интерактивных команд, когда сообщает об успешно загруженном пути к оболочке.
Источник отправляет команды, используя POST-параметры с именами:```text cmd c
Поскольку эта функциональность может привести к удалённому выполнению команд, её следует ограничить изолированными, явно авторизованными средами.
### 8. Обработка нескольких целей
Когда указан файл с целями, программа использует `ThreadPoolExecutor` и обрабатывает цели параллельно.
Количество потоков по умолчанию в исходном коде:```text
10
На высоком уровне текущая реализация следует такому потоку:```text Start │ ├── Parse command-line arguments │ ├── Load local payload file │ ├── Load one target OR target list │ ├── Create ELV_CVE output directory │ ├── Target processing │ │ │ ├── GET target │ ├── Check HTTP response │ ├── Extract token │ ├── Submit profile-import request │ ├── Check candidate file paths │ └── Record result │ └── Write results / display summary
---
## Требования
Поставляемый исходный код импортирует:
- Модули стандартной библиотеки Python:
- `random`
- `re`
- `time`
- `argparse`
- `sys`
- `os`
- `json`
- `threading`
- `concurrent.futures`
- Сторонние модули:
- `requests`
- `urllib3`
Таким образом, минимальная установка зависимостей:```bash
python3 -m pip install requests urllib3
Для воспроизводимых развёртываний зафиксируйте зависимости в файле requirements.txt.
Пример:```text requests urllib3
---
## Установка
Клонируйте или скопируйте проект в изолированную среду оценки.
Пример:```bash
git clone <YOUR-REPOSITORY-URL>
cd <YOUR-REPOSITORY-DIRECTORY>
Создайте виртуальное окружение:```bash python3 -m venv .venv
Активируйте его:```bash
source .venv/bin/activate
Установите зависимости:```bash python3 -m pip install -r requirements.txt
Проверьте Python:```bash
python3 --version
Проверьте зависимость:```bash python3 -c "import requests, urllib3; print('Dependencies OK')"
> Замените `<YOUR-REPOSITORY-URL>` и `<YOUR-REPOSITORY-DIRECTORY>` на значения, используемые в вашем репозитории.
---
## Интерфейс командной строки
В исходном коде определены следующие параметры командной строки.
### Выбор цели```text
-u, --url
Единый целевой URL.```text -f, --file
Путь к файлу, содержащему целевые URL-адреса.
Эти параметры являются взаимоисключающими, и один из них обязателен.
### Выбор полезной нагрузки```text
--shell
Путь к локальному файлу пользовательской полезной нагрузки.
Этот аргумент требуется текущей реализацией.
-t, --threads
Количество рабочих потоков.
По умолчанию:```text
10
-v, --verbose
Включает флаг подробного вывода, предоставляемый парсером аргументов.
Примечание: текущий исходный код определяет эту опцию, но не использует `args.verbose` для существенного изменения поведения вывода.
### Опция вывода```text
-o, --output
Аргумент определяется парсером, но текущая реализация не использует args.output при записи итогового результата. Текущий путь результата жёстко задан как:```text
ELV_CVE/success.txt
Это деталь реализации, которую стоит исправить в будущем релизе.
---
## Входные файлы
### Список целей
Режим списка целей ожидает по одному URL на строку.
Пустые строки игнорируются.
Строки, начинающиеся с `#`, игнорируются.
Концептуальный формат:```text
https://authorized-target-01.example
https://authorized-target-02.example
# laboratory target
https://authorized-target-03.example
В файл следует помещать только те цели, на оценку которых у вас есть явное разрешение.
Аргумент --shell указывает на локальный файл, который программа читает как текст.
Предоставленный исходный код не проверяет содержимое файла дальше успешного его чтения.
Для безопасной разработки и тестирования используйте безвредный тестовый образец вместо полезной нагрузки, выполняющей команды.
Программа создаёт:```text ELV_CVE/
Для режима с несколькими целями он записывает:```text
ELV_CVE/success.txt
Текущий источник записывает успешные shell-URL в этот файл.
Пример формата результата:```text https://authorized-lab.example/path/to/result
Программа также выводит итоговую сводку, содержащую количество успешных результатов относительно количества загруженных целей.
---
## Параллелизм
Режим с несколькими целями использует:```python
ThreadPoolExecutor
Настроенное количество потоков по умолчанию — 10.
Более высокая конкурентность может увеличить:
Для контролируемых проверок начинайте с низкого значения конкурентности и увеличивайте его только тогда, когда это позволяют среда и авторизация.
Предоставленная реализация использует requests.Session() для HTTP-взаимодействия.
Основные сетевые операции:
В исходном коде используются явные тайм-ауты запросов:
Эти значения жёстко заданы в текущем исходном коде.
Реализация устанавливает:```python s.verify = False
и подавляет `InsecureRequestWarning`.
Это означает, что проверка сертификата отключена.
Это может быть полезно в одноразовой лабораторной среде с самоподписанными сертификатами, но **не рекомендуется для обычных production-инструментов безопасности**.
Более безопасная реализация должна делать проверку сертификата настраиваемой и оставлять проверку включённой по умолчанию.
---
## Логирование и результаты
В исходном коде используется блокировка потока вокруг `safe_print()` для уменьшения конфликтов вывода между рабочими потоками.
Типичные категории статуса включают:```text
failed
success
Объект результата также может содержать такие поля, как:```text url status reason shell_url
Многопользовательский сборщик дополнительно проверяет:```text
uploaded_hidden
Однако предоставленная реализация exploit() в настоящее время не возвращает этот статус.
Это указывает на область, где модель результата могла бы быть доработана в будущей версии.
Текущая реализация обрабатывает несколько случаев сбоя:
Неудачный HTTP-запрос записывается как неудачная цель с сообщением об исключении.
Если первоначальный GET не возвращает HTTP 200, обработка этой цели прекращается.
Если ожидаемый токен не удаётся извлечь, цель отмечается как неудачная проверка уязвимости.
Исключения во время запроса на загрузку перехватываются, и скрипт продолжает работу со следующей попыткой расширения/пути.
Если локальный файл полезной нагрузки не существует, программа завершается с ошибкой.
Интерактивный канал обрабатывает KeyboardInterrupt и завершает сессию.
Основные функции в предоставленном исходном коде:
safe_print(msg)Потокобезопасный помощник для вывода в консоль.
read_custom_shell(filepath)Читает локальный файл полезной нагрузки как текст UTF-8 с игнорированием ошибок декодирования.
interactive_shell(shell_url)Предоставляет интерактивный интерфейс HTTP-команд после сообщения об успешном пути к оболочке.
exploit(url, shell_content, interactive=False)Выполняет рабочий процесс обработки цели и возвращает словарь результатов.
main()Обрабатывает:
Этот проект имеет несколько характеристик, критичных для безопасности, которые следует понимать перед использованием.
Интерактивный режим способен отправлять команды на удалённую конечную точку HTTP. Это делает его существенно более чувствительным, чем пассивный сканер.
Не распространяйте и не передавайте рабочие полезные нагрузки без необходимости.
Проверка TLS-сертификатов отключена в текущей реализации.
Это следует исправить, прежде чем рассматривать проект как зрелый инструмент безопасности.
Полезная нагрузка загружается непосредственно из локального файла и отправляется как часть HTTP-запроса.
Относитесь к файлам полезной нагрузки как к исполняемому материалу для тестирования безопасности.
Текущий исходный код не реализует строгий механизм авторизации или белого списка.
Более безопасная внутренняя версия должна поддерживать явный белый список целей.
Текущая реализация не предоставляет комплексного ограничителя скорости.
Поэтому параллельные запросы следует контролировать осторожно.
Файлы результатов могут содержать URL-адреса, связанные с успешными попытками эксплуатации. Защищайте эти файлы как конфиденциальные данные оценки.
Профессиональный рабочий процесс оценки должен выглядеть так:```text Authorization ↓ Define Scope ↓ Prepare Isolated Test Environment ↓ Confirm Target Ownership / Permission ↓ Perform Minimal Verification ↓ Collect Evidence ↓ Stop Exploitation Once Proof Is Established ↓ Remediate ↓ Retest ↓ Document Findings
Цель оценки уязвимостей должна состоять в определении риска с **минимально необходимым воздействием**, а не в получении неограниченного доступа.
---
## Рекомендуемая настройка лаборатории
Для разработки создайте выделенную среду, содержащую:
- изолированную виртуальную машину Linux;
- локальный веб-сервер;
- тестовую установку Joomla;
- соответствующий компонент/версию JCE;
- сетевую изоляцию;
- снимки/резервные копии;
- тестовые учётные записи;
- журналы приложения и веб-сервера.
Избегайте тестирования на несвязанных производственных системах.
---
## Устранение неполадок
### `ModuleNotFoundError: No module named 'requests'`
Установите зависимость Python:```bash
python3 -m pip install requests urllib3
Убедитесь, что указанный путь существует и доступен для чтения:```bash ls -l
### Первоначальный HTTP-запрос завершается неудачей
Проверьте:
- корректность URL;
- DNS;
- сетевое подключение;
- доступность HTTP/HTTPS;
- правила брандмауэра;
- область действия цели;
- журналы сервера.
### CSRF-токен не обнаружен
Ответ цели может отличаться от HTML-структуры, ожидаемой регулярными выражениями в текущей реализации.
Не предполагайте, что отсутствие токена означает, что цель защищена или уязвима. Рассматривайте это как неубедительный результат.
### Файл результатов пуст
Проверьте:```text
ELV_CVE/success.txt
и проверьте вывод консоли на наличие неудачных HTTP-запросов, ошибок извлечения токенов или отклонения загрузки.
У предоставленной реализации есть несколько ограничений.
--verbose определён, но в настоящее время не управляет подробным логированием.--output определён, но в настоящее время не используется для выбора файла результатов.json и sleep импортируются, но существенно не используются в показанной реализации.uploaded_hidden, хотя показанная функция exploit() не возвращает этот статус.Перед выпуском релиза производственного качества рассмотрите возможность добавления:
Перенесите жёстко закодированные значения в слой конфигурации:
Используйте модуль logging в Python вместо того, чтобы полагаться в основном на print().
Предлагаемые уровни:```text DEBUG INFO WARNING ERROR
### Схема результата
Определите согласованный объект результата, например:```text
target
status
reason
http_status
evidence
timestamp
Отделите проверку уязвимости от выполнения команд.
Более безопасная архитектура такова:```text Detection → Verification → Evidence
с отключённым по умолчанию интерактивным выполнением команд.
### Список разрешённых целей
Требовать явный файл области действия или список разрешённых целей перед выполнением сетевых действий.
### Фиксация зависимостей
Использовать `requirements.txt` или файл блокировки с протестированными версиями зависимостей.
### Тестирование
Добавить модульные тесты для:
- нормализации URL;
- разбора токенов;
- разбора списка целей;
- сериализации результатов;
- обработки ошибок;
- обработки путей-кандидатов.
---
## Предлагаемая структура репозитория
Чистый репозиторий мог бы использовать:```text
.
├── README.md
├── LICENSE
├── requirements.txt
├── elv-cve.py
├── tests/
│ ├── test_parser.py
│ ├── test_results.py
│ └── test_token_parser.py
├── docs/
│ └── methodology.md
└── examples/
└── targets.example.txt
Не коммитьте реальные списки целей, учётные данные, shell-пейлоады, данные сессий или конфиденциальные результаты оценки.
Рекомендуемые записи в .gitignore:```gitignore
pycache/
*.py[cod]
.venv/
venv/
.env
ELV_CVE/
*.log
*.tmp
.DS_Store
Конфиденциальные артефакты оценки должны оставаться вне публичного репозитория.
---
## Версионирование
Текущий проект идентифицирует себя как:```text
v1.0.0
Для будущих релизов рекомендуется использовать семантическое версионирование:```text MAJOR.MINOR.PATCH
Пример:```text
1.0.0
1.1.0
1.1.1
2.0.0
Используйте увеличение основной версии при внесении критических изменений в CLI, формат результатов или архитектуру.
Возможные будущие этапы:
Полезный отчёт по безопасности должен документировать:```text Title Affected Asset Affected Component Version Severity CVE / Advisory Description Preconditions Evidence Business Impact Remediation Retest Result Timeline
Не включайте в публичный отчёт учётные данные, персональную информацию, посторонние данные или ненужный вывод команд.
---
## Рекомендации по устранению
Для затронутого развёртывания Joomla/JCE устранение должно основываться на **официальном рекомендации поставщика/по безопасности и подтверждённом диапазоне уязвимых версий**, а не только на метаданных CVE, встроенных в этот скрипт.
Общие защитные действия включают:
1. Определите установленные версии Joomla и JCE.
2. Определите, попадает ли развёртывание в подтверждённый уязвимый диапазон.
3. Обновитесь до поддерживаемого поставщиком исправленного выпуска, когда он доступен.
4. Проверьте журналы веб-сервера и приложения на подозрительную активность загрузки/импорта.
5. Проверьте неожиданные файлы в доступных через веб каталогах.
6. Смените учётные данные, если предполагается компрометация.
7. Проверьте механизмы персистентности и запланированные задачи.
8. Повторно протестируйте после устранения.
9. Сохраните соответствующие доказательства в соответствии с процессом реагирования на инциденты вашей организации.
---
## Атрибуция
Брендинг проекта и метаданные источника идентифицируют движок как:
**HxN / E.L.V**
Версия проекта:
**1.0.0**
---
## Лицензия
Этот проект предназначен для распространения под:
**GNU General Public License v3.0**
Полный текст лицензии см. в прилагаемом файле `LICENSE`.
Если репозиторий ещё не содержит файл `LICENSE`, добавьте официальный текст GNU GPL v3 перед публикацией репозитория под лицензией GPL.
---
## Отказ от ответственности
Это программное обеспечение предоставляется для авторизованных исследований в области безопасности, защитного тестирования безопасности, обучения и использования в контролируемых лабораторных условиях.
Автор и участники не несут ответственности за неправомерное использование, несанкционированный доступ, ущерб, потерю данных, нарушение работы сервисов или любые другие последствия, возникшие в результате использования этого программного обеспечения.
Вы несёте исключительную ответственность за обеспечение соответствия вашей тестовой деятельности применимым законам, контрактам, политикам и требованиям явной авторизации.
**Тестируйте только системы, которыми вы владеете, или системы, на тестирование которых у вас есть явное разрешение.**
---
## Заключительное примечание
Этот README документирует поведение, раскрываемое предоставленным исходным кодом `elv-cve.py`. Он намеренно разграничивает детали реализации и утверждения, требующие независимой проверки уязвимости/рекомендаций.
Для публичного репозитория проверьте информацию о CVE и добавьте авторитетные ссылки на поставщика/рекомендации, прежде чем описывать проект как подтверждённый эксплойт для конкретного продукта/версии.