Содержание статьи
Oracle WebLogic — это решение для построения сервис-ориентированной архитектуры (SOA), создания функциональных пакетов разного уровня связанности и сложности. Под угрозой оказались все актуальные версии приложения — 10.3.6.0, 12.1.3.0, 12.2.1.3 и ниже.
Уязвимости
CVE-2018-2894 позволяет загружать произвольные файлы в систему, в том числе исполняемые (типа JSP), которые затем доступны через веб.
CVE-2018-3246 — XXE при загрузке XML-файла в качестве тестового сценария в компоненте Web Services Test Client.
CVE-2018-2628, CVE-2018-3252 — выполнение произвольного кода при помощи протокола JRMP.
CVE-2018-3191 — выполнение произвольного кода путем десериализации произвольных объектов Java, переданных через POST-запрос.
Стенд
Я буду поднимать сервер WebLogic версии 12.2.1.3.0 на системе Windows. Скачиваем инсталлятор с официального сайта Oracle из раздела Downloads. Для корректной установки и работы WebLogic потребуется JDK выше 1.8.0.130.
java.exe -jar fmw_12.2.1.3.0_wls_quick.jar
Если хочешь использовать версию ниже, то можешь отключить эту проверку, добавив ключ -ignoreSysPrereqs
.
Теперь нужно создать домен WebLogic. Для этого запускаем конфигуратор из домашней директории сервера:
oracle_common\common\bin\config.cmd
На первом этапе нужно указать, куда будут сохранены всевозможные конфиги и прочие причиндалы для новоиспеченного домена. Рекомендую оставить по дефолту, для теста это абсолютно неважно.
На втором этапе выбираем все возможные шаблоны.
Затем указываем связку логин-пароль для админа, режим работы домена — «разработка» или production. А также можно дополнительно настроить порты и сетевые устройства, на которых будет висеть сервер. Для этого отмечай галкой Administration Server в разделе Advanced Configuration.
После этого жмем на кнопку Create, откидываемся на спинку кресла и ждем создания нового домена. Это быстро, так что далеко откинуться не успеешь.
Теперь жмем на Next и попадаем на последнее окно, где можно отметить галочкой пункт Start Admin Server для немедленного запуска того, что мы наконфигурировали. Жмем на Finish. Если галочкой ты не воспользовался, то запустить сервер можно также через командную строку. Для этого заходим в домашнюю директорию WebLogic и выполняем
user_projects\domains\base_domain\startWebLogic.cmd
Разумеется, путь актуален, если ты не менял дефолтные настройки при создании домена.
Те, кто не любит сложности, могут использовать Docker и готовый образ с VulHub. Готовый стенд поднимается одной командой:
docker run -p7001:7001 --name weblogic --rm vulhub/weblogic:12.2.1.3
Это версия 12.2.1.3, а если нужна 10.3.6.0, то выполняй
docker run -p7001:7001 --name weblogic --rm vulhub/weblogic
Загрузка произвольных файлов на сервер (CVE-2018-2893, CVE-2018-2894)
Первая уязвимость присутствует в компоненте Web Services Test Client
. Он доступен по адресу /ws_utc/. Перейдя на него, ты увидишь окно авторизации.
Однако не спеши закрывать окно и расстраиваться, ведь разработчики забыли кое-что важное — добавить проверку на валидную сессию в раздел конфигурации данного раздела. И если сервер работает в режиме development, то получить к нему доступ можно, просто перейдя на /ws_utc/config.do.
ws-testpage-impl.jar.src/com/oracle/webservices/testclient/web/Processor.java
40: public Forward config() {
41: if (RequestUtil.isProductionMode()) {
42: this.response.setStatus(503);
43: return null;
44: }
45: String defaultType = this.request.getParameter("default");
46: if (defaultType == null) {
47: defaultType = "";
48: }
49: this.request.setAttribute("default", defaultType);
50: return new Forward("setting");
51: }
Основные исходники этого компонента ты найдешь в файле
<weblogic_home>/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/WEB-INF/lib/ws-testpage-impl.jar
Уже можно вооружаться JD-GUI или воспользоваться онлайновым декомпилятором, чтобы посмотреть поближе на логику работы приложения.
Надеюсь, ты помнишь про настройку Work Home Dir
на странице конфига? В ней указывается путь, где расположены файлы, нужные для работы тестового клиента, причем есть возможность этот путь менять. После внесения изменений уже существующая структура, включая файлы и папки, переносится из старой директории в новую.
ws-testpage-impl.jar.src/com/oracle/webservices/testclient/setting/TestClientWorkDirManager.java
61: public void changeWorkDir(String path) {
62: String[] oldPaths = getRelatedPaths();
63:
64: if (this.testPageProvider.getWsImplType() == ImplType.JRF) {
65: this.isWorkDirChangeable = false;
66: this.isWorkDirWritable = isDirWritable(path);
67: this.isWorkDirChangeable = true;
68: setTestClientWorkDir(path);
69: } else {
70: persistWorkDir(path);
71: init();
72: }
73:
74: if (this.isWorkDirWritable) {
75: String[] newPaths = getRelatedPaths();
76: moveDirs(oldPaths, newPaths);
Следующий шаг в нашем списке дел — это найти такую директорию, которая будет доступна из веба. Отлично подойдет css
, она расположена примерно по тому же пути, где валялся jar: <weblogic_home>/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
. В зависимости от имени сервера будет изменяться часть AdminServer
, а в зависимости от версии WebLogic — часть 4mcj4y
. После того как мы сохраним изменения, вся структура приложения будет доступна из веба. Пока там у нас только один конфиг general, но это ненадолго.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»