反序列化漏洞原理_Weblogic XMLDecoder 反序列化漏洞

本文深入探讨了Weblogic的反序列化漏洞CVE-2017-3506、CVE-2017-10271和CVE-2019-2725,包括漏洞原理、修复措施和绕过方法。通过分析源码,揭示了利用SOAP消息头中的payload触发漏洞的流程,并展示了不同修复后的绕过payload,强调了黑名单策略的局限性。
摘要由CSDN通过智能技术生成

这次来研究一下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.如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值