weblogic漏洞笔记
weblogic
历史漏洞
反序列化
CVE-2015-4852&CVE-2016-0638(没试)
基于weblogic t3 协议引起远程代码执行的反序列化
RMI通信传输反序列化数据,接收数据后进行反序列化,正常RMI通信使用的是JRMP协议,而在Weblogic的RMI通信中使用的是T3协议。T3协议是Weblogic独有的一个协议,相比于JRMP协议多了一些特性。
t3协议特点
1.心跳包机制,60秒一次,240秒未收到心跳判定与客户端连接丢失
2.建立一次连接可以将全部数据包传输完成,优化了数据包的大小和网络消耗
请求包头
t3 12.2.1 AS:255 HL:19 MS:10000000 PU:t3://us-l-breens:7001 |

返回的内容中HELO后面有版本号
分析序列化数据看不懂,跳过
漏洞复现
- 将weblogic发送的JAVA序列化数据的第二到九部分的JAVA序列化数据的任意一个替换为恶意的序列化数据。
- 将weblogic发送的JAVA序列化数据的第一部分与恶意的序列化数据进行拼接。
这里可以用jdk7u21和cc1两条链,用创建文件的方式来检验反序列化是否成功
from os import popen |
查看容器的/tmp目录发现创建了success文件
再回来看看poc,这个poc本质就是把ysoserial生成的payload变成t3协议里的数据格式。
- 数据包长度包括了自身长度和其他三部分数据包长度,所以需要先占位,计算出长度后再替换进去
- T3协议头是固定的,直接硬编码进去就行
- 反序列化标志+数据=weblogic反序列化标志
fe010000+ysoserial生成的序列化数据
修复
resolveclass方法的作用是将类的序列化描述符加工成该类的class对象
Weblogic对CVE-2015-4852的修复措施是在resloveClass里加上 ClassFilter.isBlackListed黑名单过滤,黑名单过滤了CommonCollections
开放在外网的情况下,可以采用web代理和负载均衡,web代理的方式只能转发http请求,而不会转发推协议的请求,负载均衡的情况下,可以指定需要负载均衡的协议类型,这里可以设置为http的请求,不接受其他的协议请求转发,这也是在外网见到T3协议漏洞比较少的原因之一
CVE-2016-3510
基于weblogic t3 协议引起远程代码执行的反序列化
CVE-2017-3248
基于weblogic t3 协议引起远程代码执行的反序列化,属于weblogic JRMP反序列化
CVE-2018-2628&CVE-2018-2893
影响版本
10.3.6.0
12.1.3.0
12.2.1.2
12.2.1.3
复现
方法一 : nmap -n -v -p 7001 127.0.0.1 –script weblogic-t3-info

基于weblogic t3 协议引起远程代码执行的反序列化,属于weblogic JRMP反序列化
CVE-2023-21839
由于Weblogic t3/iiop协议支持远程绑定对象bind到服务端,并且可以通过lookup查看,当远程对象继承自OpaqueReference时,lookup查看远程对象,服务端会调用远程对象getReferent方法。weblogic.deployment.jms.ForeignOpaqueReference继承自OpaqueReference并且实现了getReferent方法,并且存在retVal = context.lookup(this.remoteJNDIName)实现,故可以通过rmi/ldap远程协议进行远程命令执行
影响范围
- WebLogic_Server = 12.2.1.3.0
- WebLogic_Server = 12.2.1.4.0
- WebLogic_Server = 14.1.1.0.0
poc构造
使用main方法创建了一个getInitialContext方法并使用getInitialContext方法,创建初始上下文并使用T3协议与WebLogic服务器连接,然后创建了一个weblogic.deployment.jms.ForeignOpaqueReference类的实例并通过反射机制访问私有字段以设置远程JNDI名称,并将其绑定到WebLogic服务器上的”bind”命名对象,导致命令执行漏洞。
任意文件上传
CVE-2018-2894
访问http://your-ip:7001/ws_utc/config.do ,上传,返回包里有时间戳,一会会作为文件名使用
访问http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]
修复
设置config.do页面登陆授权后访问
ips等防御产品可加入相应的特征
升级到官方最新版本
xmldecoder反序列化
CVE-2017-3506&CVE-2017-10271
weblogic wls组件中存在xmldecoder远程代码执行漏洞,可以构造请求对运行的weblogic中间件进行攻击
影响版本
- WebLogic 10.3.6.0
- WebLogic 12.1.3.0
- WebLogic 12.2.1.0
- WebLogic 12.2.1.1
- WebLogic 12.2.1.2
漏洞地址
[*] wls-wsat组件路径(url路径): |
CVE-2017-3506`修补方案为采用黑名单机制禁用了object标签,这简直不要太好绕,所以CVE-2017-10271来了。
绕过就是把object标签改为void标签就行了,因为从代码层面来看,void和object的handler因为是父子类关系,所以逻辑是高度相同的。
# 对weblogic路由 http://xxx:7001/wls-wsat/CoordinatorPortType 发送如下数据包 |
需要修改java版本,调用类,0,1,2的参数
CVE-2017-10271的补丁则是继续把黑名单补全,可见除了object,还有method,new,array等标签都被做了处理。 object,new,method标签直接被ban,void属性只能设置index,array的class只能设置为byte类型。
使用class标签构造类,但是由于限制了method函数,无法进行函数调用,只能从构造方法下手,且参数为基本类型:
- 构造函数有写文件操作,文件名和内容可控,可以进行getshell。
- 构造函数有其他的反序列化操作,我们可以进行二次反序列化操作。
- 构造函数直接有执行命令的操作,执行命令可控。
- 有其它的可能导致rce的操作,比如表达式注入之类的。
目前存在的利用链有:
- FileSystemXmlApplicationContext-RCE
- UnitOfWorkChangeSet-RCE
- ysoserial-jdk7u21-RCE
- JtaTransactionManager-JNDI注入
任意文件下载
http://127.0.0.1:7001/hello/file.jsp?path=
读取后台用户密码
weblogic密码使用AES加密,只需要找到用户的密文和加密是的密钥
这两个文件均位于base_domain下,名为serializedSystemIni.dat和config.xml
在本环境中为./security/serializedSystemIni.dat和./config/config/xml
SSRF
cve-2014-4210
影响范围
10.0.2
10.3.6
漏洞地址
http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp
提交的时候 operator参数可控,存在ssrf









