这次来研究一下weblogic一些反序列化漏洞.主要是: CVE-2017-3506 ,CVE-2017-10271 CVE-2019-2725这三个CVE,就是一个不停绕过的过程.从CVE-2017-3506开始发现,官方设置黑名单,安全研究者绕过了两次.感觉可能会有第三次. 漏洞测试环境参考:Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271).
分析之前
在分析之前,说明一下,无论是前面的文章,还是目前这篇,都是以一个payload传播过程来分析,简单来说就是payload服务端获取过程->payload一些传播处理(比如对payload字符串的切割)->payload最终到达触发函数触发漏洞
,我们明白这三个过程,漏洞产生流程也就明白了.
原理分析
复现中使用的payload是参考vulhub中的.首先,对于weblogic获取POST的body的过程不太了解.感兴趣的可以网上搜一下weblogic执行流程.我们直接从weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest(Packet var1)
看起.
//var1 为请求body内容(soap message)的包装对象
public NextAction processRequest(Packet var1) {
this.isUseOldFormat = false;
if (var1.getMessage() != null) {
//获取soap 的所有header
HeaderList var2 = var1.getMessage().getHeaders();
//获取header中namespace uri为http://bea.com/2004/06/soap/workarea/的header
Header var3 = var2.get(WorkAreaConstants.WORK_AREA_HEADER, true);
if (var3 != null) {
//读取该header
this.readHeaderOld(var3);
this.isUseOldFormat = true;
}
Header var4 = var2.get(this.JAX_WS_WORK_AREA_HEADER, true);
if (var4 != null) {
this.readHeader(var4);
}
}
return super.processRequest(var1);
}
从上述源码发现,该方法接受的var1
是weblogic已经包装好的soap的message.如下: