В этой статье мы поговорим сразу о нескольких уязвимостях в сервере приложений Oracle WebLogic, написанном на Java. Этот продукт безумно популярен в энтерпрайз-среде и попадается постоянно на периметрах разных компаний от мала до велика. Уязвимости носят критический характер и позволяют злоумышленнику выполнить произвольный код на целевой системе.
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_commoncommonbinconfig.cmd
На первом этапе нужно указать, куда будут сохранены всевозможные конфиги и прочие причиндалы для новоиспеченного домена. Рекомендую оставить по дефолту, для теста это абсолютно неважно.
На втором этапе выбираем все возможные шаблоны.
Затем указываем связку логин-пароль для админа, режим работы домена — «разработка» или production. А также можно дополнительно настроить порты и сетевые устройства, на которых будет висеть сервер. Для этого отмечай галкой Administration Server в разделе Advanced Configuration.
После этого жмем на кнопку Create, откидываемся на спинку кресла и ждем создания нового домена. Это быстро, так что далеко откинуться не успеешь.
Теперь жмем на Next и попадаем на последнее окно, где можно отметить галочкой пункт Start Admin Server для немедленного запуска того, что мы наконфигурировали. Жмем на Finish. Если галочкой ты не воспользовался, то запустить сервер можно также через командную строку. Для этого заходим в домашнюю директорию WebLogic и выполняем
user_projectsdomainsbase_domainstartWebLogic.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
Первая уязвимость присутствует в компоненте Web Services Test Client
. Он доступен по адресу /ws_utc/. Перейдя на него, ты увидишь окно авторизации.
Однако не спеши закрывать окно и расстраиваться, ведь разработчики забыли кое-что важное — добавить проверку на валидную сессию в раздел конфигурации данного раздела. И если сервер работает в режиме development, то получить к нему доступ можно, просто перейдя на /ws_utc/config.do.
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
на странице конфига? В ней указывается путь, где расположены файлы, нужные для работы тестового клиента, причем есть возможность этот путь менять. После внесения изменений уже существующая структура, включая файлы и папки, переносится из старой директории в новую.
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 год4990 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости