渗透测试之中间件漏洞复现
零.介绍:
WebLogic 是由美国 Oracle 公司出品的一 application server,准确的说就是一个基于 JAVAEE 而开发的一个中间件,类似 Tomcat,WebLogic 是一个用于开发,集成,部署与管理大型分布式 Web 应用,网络应用和数据库的 java 应用服务器。将 java 动态功能与 java Enterprise 标准的安全性引入大型网络应用的开发,集成,部署与管理之中。
其实 WebLogic 与我们所用的 Tomcat 定位一样,是用于部署 java web 程序的服务器,用于连接客户端与服务器甚至可以部署管理数据库,对其进行管理,这也正是 WebLogic 与 Tomcat 的不同之处,WebLogic 可以用于部署大型的项目,因为 WebLogic 中包括了 ejb,jsp,servlet,jms 的容器,是可以实现更高更多的功能,但是 Tomcat 是官方指定的 jsp$servlet 服务器,只实现了 jsp/servlet 的相关规范,并不支持 EJB,但是对于我们学习或者搭建小型 java web 项目时,Tomcat 是很方便的容器。
WebLogic Server 凭借其出色的群集技术,处理关键的 Web 应用系统问题所需的性能,可拓展性与高可用性。
即实现了网络群集,也实现了 EJB 组件群集,不需要任何专门的硬件或操作系统支持,可以实现透明的复制,负载平衡以及表示内容容错。但是无论是网页群集还是组件群集,对于电子商务解决方案所需可拓展性与可用性都是至关重要的。共享客户机/服务器和数据库连接以及数据缓存和 EJB 都增强了性能表现,这也是其他 Web 应用程序所不具备的,所以在拓展性方面 WebLogic 是远超了 Tomcat。
【一>所有资源获取<一】1、电子书籍(白帽子)2、安全大厂内部视频 3、100 份 src 文档 4、常见安全面试题 5、ctf 大赛经典题目解析 6、全套工具包 7、应急响应笔记 8、网络安全学习路线
一.CVE-2017-10271 漏洞复现
1).官方文档
在 CVE 官网找到官方的描述:
Oracle Fusion Middleware 的 Oracle WebLogic Server 组件中的漏洞(子组件:WLS Security)。受影响的受支持版本包括 10.3.6.0.0、12.1.3.0.0、12.2.1.1.0 和 12.2.1.2.0。易于利用的漏洞允许未经身份验证的攻击者通过 T3 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。CVSS 3.0 基本分数 7.5(可用性影响)。CVSS Vector: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H).
2).问题类型
易于利用的漏洞允许未经身份验证的攻击者通过 HTTP 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。
3).影响版本
Weblogic Server
=10.3.6.0.0:影响 10.3.6.0.0
=12.1.3.0.0:影响 12.1.3.0.0
=12.2.1.1.0:影响 12.2.1.1.0
=12.2.1.2.0:影响 12.2.1.2.0
4).漏洞描述:
在 Oracle Fusion Middleware 中的 Oracle Weblogic Server 组件的 WLS Security 子组件存在的安全漏洞,使用精心构造的 xml 数据可能造成任意代码执行,攻击者需要发送构造的 HTTP 请求,就可以得到目标服务器权限。攻击者可以利用漏洞控制组件,影像数据的可用性,保密性以及完善性。
兄弟们不难看出,与 CVE-2018-2628 不同的是,这次我们是伪造 HTTP 数据包进行构造 payload,而 CVE-2018-2628 中是利用 T3 协议,直接在其中间插入反序列化的恶意代码,使其执行恶意类造成对象的直接调用。所以两个漏洞的原理其实都是反序列化,对于对象的直接调用导致,只不过利用原理不同。
其实 CVE-2017-10271 前身是 CVE-2017-3506,在早期 Oracle 官方就发布了对于 CVE-2017-3506 的补丁,但是其实只是采用了黑名单的修复方案,所以经过精心的构造,还是可以抓包构造相应的 http 请求进行利用。
经过我个人复现之后发现核心思想就是 Weblogic Sercurity 组件对外提供了 webservice 服务,其中利用了 xmldecoder 的方式来解析用户所传输的 xml 数据,于是在解析过程中就出现了反序列化漏洞,导致了可执行的命令。
当我们在复现时,访问 wls-wsat/WorkContextServer 这个目录,发现可以访问就说明有此漏洞,但是我看了很多文章,都没有说到到底为什么,或者这个目录文件是干什么的,这个其实是 weblogic 中 wls-wast.war 包提供的一个类,通过 wls-wsat 提供 web service 服务,之后通过 WLSServletAdapter 进行处理,之后交给 WorkContextServerTube 类处理 POST 提交的数据包中 xml 的数据。
在此不多解释了,我们开始复现:
5).复现过程
搭建环境,首先利用 docker 搭建 vulhub 靶场,进入对应目录,并搭建环境
成功
之后我们先查看 vulhub 提供的 README.MD 文件查看复现流程,发现其实和我们分析的一样,进行抓包修改 http 数据包进行恶意类实现
于是我们开始复现
首先验证漏洞是否存在
1.利用工具进行验证
利用安恒信息为大家提供的漏洞专项检测工具进行检测:
发现检测成功
漏洞确实存在
2.直接进行验证
当我们搭好环境后发现可以访问http://127.0.0.1:7001/wls-wsat/CoordinatorPortType
时说明存在此漏洞,原因上面说过,不在赘述了
利用 win10 主机进行访问,抓包修改 http 数据包
ok
反弹 shell
在我们修改数据包插入 poc 之前首先监听靶机端口
之后修改 poc 进行发送
反弹 shellpoc
修改数据包
如图,首先请求类型为 post,才能在下面添加 poc
之后修改 content-type 类型为 text/xml,直接修改文件类型可能会造成 xml 解析错误
之后将 poc 中 ip 改为监听地址
成功反弹 shell
注意,复现此漏洞时我只用了一个虚拟机
文件上传
抓包并修改数据包实现文件上传漏洞
文件上传 poc
放包,之后访问上传界面
二.CVE-2018-2628 漏洞复现
1).官方文档
在 CVE 官网中找到官方描述:
Oracle Fusion Middleware 的 Oracle WebLogic Server 组件(子组件:WLS Core Components)中的漏洞。受影响的受支持版本包括 10.3.6.0、12.1.3.0、12.2.1.2 和 12.2.1.3。易于利用的漏洞允许未经身份验证的攻击者通过 T3 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。CVSS 3.0 基本分数 9.8(机密性、完整性和可用性影响)。CVSS Vector: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
2).问题类型
易于利用的漏洞允许未经身份验证的攻击者通过 T3 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。
3).影响版本
Weblogic Server
=10.3.6.0:影响 10.3.6.0
=12.1.3.0:影响 12.1.3.0
=12.2.1.2:影响 12.2.1.2
=12.2.1.3:影响 12.2.1.3
复现时利用 jdk 1.7 以上版本就可以
4).知识点补充
在复现漏洞之前首先需要了解一些名词与协议知识
1.JAVA RMI(java remote method invocation) java 远程方法调用:
在编程语言中,是一种用于实现远程过程调用的应用程序接口。它使客户机上运行的程序可以调用远程服务器上的对象。这一方法可以使编程人员在网络环境中进行分布式操作。rmi 全部的宗旨就是尽可能简化远程调用接口对象的使用。java rmi 极大依赖于接口。在需要创建一个远程对象的时候,程序员可以通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象正好与本地的根代码连接,由后者负责透过网络通信。
rmi 可以直接跨越 jvm(java 虚拟机)进行调用远程方法,一般 java 方法调用指的是调用一个 jvm 内的一个方法,但是 rmi 与之恰恰相反。
例如我们利用浏览器对于一个 http 协议实现的接口进行调用,这个接口可以称之为 interface invocation,而 rmi 的概念与之相似,同是调用,知识 http 协议调用的是一个接口,但是 rmi 调用的是一个 java 方法,java 中对于 rmi 进行了一系列的定义。
通俗易懂:rmi 就是对于 java 远程方法的调用
2.JRMP 协议(java remote method protocol) java 远程调用协议:
jrmp 是基于 tcp/ip 之上的线路层协议,rmi 的过程,就是利用 jrmp 协议进行组织数据格式之后通过 tcp 协议进行传输,从而达到 rmi 方法的实现,远程方法调用。
同 rmi 介绍中,我们使用浏览器进行访问一个网络接口时,浏览器与服务器之间的数据传输以及数据格式之间的组织,是用到基于 tcp/ip 之上的 Http 协议,只有基于 Http 协议,浏览器与服务端才能约定好,进行正常的交流通讯,jrmp 也是基于此原理,但是 jrmp 仅用于 java RMI 中。
jrmp 是一个用于 rmi (java 远程方法调用的协议)只有基于此协议,调用双方才能正常数据交流。
关键的是,jrmp 协议对于 rmi 调用双方都必须是依赖于 java 语言的,即客户端与服务端都必须使用 java,jrmp 是基于流的协议,只能是一个对象的 java 到 java 的调用。
可以参考上面的 rmi 调用步骤图进行理解。
3.T3 协议:
之前提及 jrmp 只用于单个对象的 java 到 java 调用,而 T3 协议就是用于 Weblogic 服务器与其他类型的 java 程序之间进行传输信息的程序。Weblogic 跟踪连接到应用程序的每个 jvm,将流量传输到 jvm,Weblogic 会创建一个 T3 连接,该连接会通过消除网络之间的多个协议来进行最大化效率,从而使用较少的操作系统资源。用于 T3 连接的协议还可以最大限度减少数据包大小,提高传输速度。
T3 协议主体包括:
1.请求包头 2.请求主体
请求包头类似:
以\n
结束
同时,我们发送 t3 的请求包,可用于刺探服务器 weblogic 版本,该服务器会将自身版本进行响应,形如
而在此漏洞中原理也是,在 T3 协议中将一部分替换为恶意序列化数据进行恶意操作的实现
4.ysoserial:
java 反序列化漏洞原理的分析,大多都是分析使用 Apache Commons Collections 这个第三方库,我们分析学习的 cc 链也是基于此库,而 ysoserial 则是一个用于生成利用不安全的 java 对象反序列化的有效负载的概念验证工具。为 java 反序列化提供了更多的可能。
ysoserial 利用了 java 反射机制与动态代理机制生成 poc。
感兴趣的兄弟可以下载分析一波,里面有很多 payload 值得学习。
当时在导入 maven 包时可能会有报错,正常问题,百度就可以找到大致解决方法。
5).复现过程
首先我们打开虚拟机
启动 vulhub/weblogic/CVE-2018-2628 环境
利用 docker ps 查看 uid 与启动端口
此时访问http://127.0.0.1:7001/console/
就可以访问到 weblogic
环境布置成功,此时我们了解一下复现的原理
由于 docker 只能与布置主机(虚拟机)进行直接命令互通,所以我们直接利用虚拟机作为攻击机,利用 docker 作为靶机进行复现
查看 docker 容器的 ip
即攻击机 ip:192.168.0.134
靶机 ip:172.24.0.2
环境建立好了,ip 也知道了,此时我们在两台服务器之间建立 JRMP 服务,在攻击机中启动一个 JRMP Server,利用 ysoserial 来建立
加载成功,一开始可能会报错,连接错误或拒绝访问,多试几次就可以了。
查看文件位置
有了! 注意此时我是在 weblogic 文件夹中建立的,推荐在桌面创建一个文件夹进行下载存储。
此时我们利用 ysoserial 来监听 weblogic 中的 7001 端口
开始监听
之后我们到利用类下载网站https://www.exploit-db.com/exploits/44553
下载 exploit 脚本
下载后拖动虚拟机或直接下载都可以
直接下载命令:
之后调用脚本进行执行之前的 exp
执行成功!查看端口回显:
查看 docker 目录下是否多了 lidalu.txt
我们发现,命令执行成功了,此时可以验证,复现成功了!
三.CVE-2014-4210 SSRF 漏洞复现
1).官方文档
Oracle Fusion Middleware 10.0.2.0 和 10.3.6.0 中的 Oracle WebLogic Server 组件中存在未指定的漏洞,使得远程攻击者能够通过与 WLS 相关的载体 ( Web Services) 影响机密性。
2).影响版本
weblogic
10.0.2--10.3.6.0
3).漏洞描述
在weblogic 10.0.2--10.3.6.0
版本,http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp
处存在漏洞,我们可以同通过构造请求来利用返回的错误信息来观察探测开放端口的状态等,甚至可以通过该 ssrf 构造任意 http 请求来攻击内网 redis 或 fastcgi 等组件。
4).SSRF
***ssrf(server-side request forgery:服务器请求伪造)***是一种由攻击者构造的由服务端请求的一个安全漏洞。
通常情况下,一般防火墙只对于外部网络进行防护,但是对于内部网络没有过多的措施,于是我们直接伪装成为内部机器向内网发送请求,机器就会判定这样的请求是安全可靠的,于是就会执行我们所想要执行的命令,也就绕过了防火墙的限制,并对内网实现横向渗透,这就是一般 ssrf 的实现方式:
例如:
假设一个公司的网络对于外网提供了名为 public.example.com 的网站服务器,该网站通过后置/proxy,来对于 url 中的指定参数进行网页链接的跳转,例如
public.example.com/proxy?url=google.com 此时页面就会跳转到谷歌界面,此公司的后台管理界面域名为 admin.example.com,此链接只能由内部网络进行访问,外网无法直接访问,于是此时我们如果构造 public.example.com/proxy?url=admin.example.com 来访问,会发生什么情况呢,此时内网会判定此请求是由供公司内部机器进行的请求,于是就会直接跳转到相应的界面,这就是对于外部的服务与内部机器之间没有实施相应的安全措施,就造成了 ssrf 的实现
ssrf 实现:
通常情况下,ssrf 一般发生在服务端在请求外部资源的情况中,例如有时服务端应用会请求读取外部图片来创建缩略图
或者在浏览评论时有视频文件的动态资源图片 ,于是,如果此时服务端没有对于图片或 gif 动图采取内部资源处理的话,我们就可以利用其来实现 ssrf
进一步访问内部网络中的信息系统
还有如果一个网站支持以 url 的形式获取用户头像的话,并且并没有对于内部资源或 url 有进一步的安全措施,我们就可以通过 ssrf 实现恶意功能
ssrf 攻击形式:
1.我们可以在目标 url 后添加不同 ip 来根据回显信息了解服务器的一些信息或内网的信息
2.我们在 ip 后加不同的 port 也可以根据回显信息来判断服务或一些端口信息,实现内网端口扫描
3.最严重的,ssrf 可以通过构造一些危险 url 获取到一些信息,比如管理员密码,之后上传 webshell,之后你懂的
或者对于一些薄弱的网址或不安全的管理界面入手进行,利用其弱点进行构造脚本,来实现远程代码执行
至于具体实现方式,大家了解就好,切勿做违法乱纪的事
说完了这些,此时我们开始复现:
5).复现过程:
复现这个漏洞的时候我 docker 访问 redies 的时候发生了错误,就是拖托取环境失败了,于是我们在本机进行手动搭建 weblogic 环境复现:
首先下载 weblogic 环境,直接去官网进行下载:
https://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html
下载后安装,下面提供安装教程:
https://blog.csdn.net/hdqhdq123/article/details/41745889
因为上面网盘提供的就是 10.3.6.0,所以我特意找了一个对应版本的教程
安装成功后,打开
对应目录下的 cmd 文件,会自动启动 weblogic 服务
如下信息表示启动成功
访问http://youip:7001
访问 weblogic,之后我们进入漏洞所在目录:
http://192.168.0.1:7001/uddiexplorer
漏洞存在于
此时我们构造恶意 url:在 url 后面加入
此时发包
回显如下结果,此回显表示此 ip 存在并且端口开放
此处泄露了内网信息,此时我在本地搭建,所以显示 localhost,如果我们现实遇到不会显示 localhost
我们访问 redis 服务
显示未开放
对于 ssrf 探测回显信息的意义有四种:
对于请求未开放的服务:
weblogic . uddi. client. structures. exception.XML_ SoapException: Triedall:'1' addresses, but could not connect over HT TP to server:'fuzz.wuyun.com', port: '88'
对于请求可能被识别的服务:
weblogic.uddi. client structures. exception.XML SoapException:Received a response from url: http :/www.baidu.com/ which did not have a valid SOAP content-type: text/html; charset=UTF-8.
即我们之前提及的可以跳转的 url
对于请求开放的服务:
weblogic . uddi. client. structures.exception.XML SoapException:Received a response from url: http://fuzz .wuyun .com:22 /helo which did not have a valid SOAP content-type: null.
对于不可被识别的服务:
weblogic.uddi. client. structures .exception.XML_ SoapException:Received a response from url: http://fuzz .wuyun.com:22 which didnot have a valid SOAP content-type: null.
此时我们访问 6389 端口发先未开放 redis 服务,因为我没有搭建数据库等内网服务
当我们遇到开放 redis 服务的机器时,即 6389 显示开放的机器,我们利用此机器为跳板,向开启 redis 的机器发送弹 shell 的脚本到/etc/cronrab 文件,之后开启监听,反弹 shell 即可
四.CVE-2018-2894 漏洞复现
1).官方文档
Oracle Fusion Middleware 的 Oracle WebLogic Server 组件中的漏洞(子组件:WLS - Web Services)。受影响的受支持版本包括 12.1.3.0、12.2.1.2 和 12.2.1.3。易于利用的漏洞允许未经身份验证的攻击者通过 HTTP 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。CVSS 3.0 基本分数 9.8(机密性、完整性和可用性影响)。CVSS Vector: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
2).影响版本
Weblogic Server
12.1.3.0
12.2.1.2
12.2.1.3
在网上看到很多文章都写了包括版本 10.3.6.0 的 weblogic,但是我搭完环境之后查看,没有在域管理高级设置里找到 Enable Web Service Test Page 这一选项,如果有懂的兄弟可以告我一声。
3).漏洞描述
在多个 Weblogic Server 版本中,我们通过开启 web 服务测试页也就是上面所说的 Enable Web Service Test Page,可以实现任意文件上传,但是其实经过测试,这个洞可用之处少之又少,因为其实在生产模式中,web 服务测试页是默认关闭的,所以我们其实是无法从外网访问到 weblogic 的,所以其实利用范围很局限。
在打开 web 服务测试页选项后,我们设置测试页地址为一个公开地址,之后在此页面展示上传文件处即可实现任意文件上传。
4).漏洞复现
我利用了 docker+vulhub 进行复现
首先部署环境
查看 readme.me 文件了解思路
通过 docker-compose logs | grep password 命令获取 weblogic 后台登录用户名密码(win 中搭建环境的兄弟在安装的时候就会显示设置账号密码,之前提起,我们不多做解释)
输入进行登录
登陆成功后,在域管理中找到其他选项设置
勾选中服务器测试页选项(我之前说的 10.3.6.0 没有此选项就是这个)
设置完成后我们设置测试页面
访问http://172.17.0.1:7001/ws_utc/config.do
或访问http://172.17.0.1:7001/ws_utc/begin.do
访问 config.do 修改 work home dir 为静态地址
因为这个地址是外网可以访问的,我们自动部署的 web 服务就在这个地址,这个目录外网可以访问且不需要权限,外网通过http://your-ip:7001/ws_utc/css/
文件名来访问这个地址下的文件,于是此时我们就可以实现任意文件上传了
在 security 中添加文件
上传 webshell
上传成功
打开网页控制台,找到对应前台代码,找到时间戳
之后访问上传的文件,http://192.168.0.134:7001/ws_utc/css/config/keystore/
[时间戳]_[文件名]执行 webshell(注意此时访问的是你虚拟机的地址,不能是 127,否则会显示 404)
查看文件目录执行成功
在网上看文章,一个师傅写了一个大马,我们利用一下
执行 jsp 大马
上菜刀!
连接好了!
复现完成后兄弟们其实也发现这个洞的局限之处,就是版本控制严重而且一般不会对外开放测试页面的,所以想要上传文件其实是很难的
五.CVE-2020-14882
1).官方文档
Oracle Fusion Middleware 的 Oracle WebLogic Server 产品中的漏洞(组件:控制台)。受影响的受支持版本包括 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。易于利用的漏洞允许未经身份验证的攻击者通过 HTTP 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。CVSS 3.1 基本分数 9.8(机密性、完整性和可用性影响)。CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
2).问题描述
易于利用的漏洞允许未经身份验证的攻击者通过 HTTP 进行网络访问,从而破坏 Oracle WebLogic Server。成功攻击此漏洞可导致 Oracle WebLogic Server 被接管。
3).影响版本
WebLogic Server
=10.3.6.0.0:影响 10.3.6.0.0
=12.1.3.0.0:影响 12.1.3.0.0
=12.2.1.3.0:影响 12.2.1.3.0
=12.2.1.4.0:影响 12.2.1.4.0
=14.1.1.0.0:影响 14.1.1.0.0
4).漏洞描述
2020 十月的 weblogic 服务器更新中,官方修复了两个由长亭科技安全研究员 @voidfyoo 提交的安全漏洞,为 cve-2020-14882 与 cve-2020-14883
14882 漏洞允许未授权用户绕过管理控制台的权限验证访问后台,14883 允许后台任意用户通过 http 协议执行任意命令,使用两个漏洞形成的利用链可以通过一个 GET 请求在远程 weblogic 服务器上以未授权的任意用户执行命令。
--------------------vulhub 文件描述
这个漏洞是一个 console 组件的未授权访问,而 cve-2020-14882 就在未授权的前提之下,在 console 进行代码执行,攻击者于是可以构造特殊的 http 请求,在未经验证的情况下接管 weblogic server console,并执行任意代码,触发在 console 组件,而 console 对应的 webapp,所以形成了此漏洞。
我们这里不做赘述,进行复现
5).漏洞复现
利用 docker+vulhub 搭建环境
查看 readme.me 文件了解复现步骤以及复现原理
访问http://192.168.0.134:7001/console
进入登录界面
之后我们访问构建的 url 直接绕过访问后台界面http://192.168.0.134:7001/console/css/%252e%252e%252fconsole.portal%252e%252e%252f
就是二次编码过的../,利用此转义实现穿越路径未授权访问后台
但是此时我们看到,与之前利用账号密码登录的时候少了很多东西,因为未授权登录使我们权限不足,缺少部署执行等功能,我们利用 14883 来进行组合攻击
首先我们利用 exploit 类执行某些命令
下载 exploit
执行成功
我们试一下执行命令
抓包
修改数据包,构造执行命令打开计算机
放包
成功
实现写入文件
还是一样的思路
抓包
修改数据包,实现写入文件
成功写入!
对于 weblogic 的复现就到这。
评论