反序列化漏洞汇总
JAVA反序列化、PHP反序列化,场景容器反序列化利用过程
原理:在反序列化的过程中,将字节流转化为对象。在此过程,由于输入不可控,并且后端对用户输入过滤不严格,攻击者通过构造恶意输入,在反序列化后,调用魔术方法执行任意恶意代码,产生非预期对象。
- 用户输入不可控
- 输入的恶意代码被执行
由于序列化后的字节流别中间件接收,在服务器端进行反序列化。
PHP
serialize()、unserialize()
PHP 反序列化漏洞的条件为:触发点输入的参数可控,魔术方法中可以执行任意变量,不会对危险操作进行校验。
魔术方法:
魔术方法是内置的,经常被执行的。
__construct():在对象创建时自动被调用;
__ sleep():在对象序列化的时候自动被调用;
__destruct():在脚本运行结束时自动被调用;
__wakeup():在反序列化为对象时自动被调用;
__toString(): 直接输出对象引用时自动被调用;
JAVA
反射
反射的意思就是通过调用 obj.getClass() 等函数,能够获取一个对象所属的类,进而能够执行该类中的方法(包括私有方法)
JAVA 反序列化概念
Java 反序列化漏洞分为 触发点 和 利用链(Gadget)
- 触发点:要满足输入可控
- 利用链:要满足能执行任意变量(包含危险命令等操作)
总结一句话就是:在与客户交互的页面中,某些方法输入的参数不可控(触发点),能够给攻击者构造任意参数的机会。将攻击者构造的参数传递给后台去执行(利用链),一般会读取输入的参数、计算输入的参数,从而执行了攻击者构造的恶意参数。
java.io.ObjectOutputStream 类中的 writeObject( ) 方法可以实现 Java序列化。
java.io.ObjectInputStream 类中的 readObject( ) 方法可以实现 Java反序列化。
Java中间件通常通过网络接收客户端发送的序列化数据,而在服务端对序列化数据进行反序列化时,会调用 readObject( ) 等方法。如果某个对象重写了readObject( ) 等方法(在Java中如果重写了某个类的方法,就会优先调用经过修改后的方法),且在方法中能够执行任意代码,那服务端在进行反序列时,也会执行相应代码。
如果能够找到满足上述条件的对象进行序列化并发送给Java中间件,Java中间件也会去执行指定的代码,即存在反序列化漏洞。
Java序列化的要求
1、实现Serializable接口或Externalizable接口
2、当前类提供一个全局常量 serialVersionUID
3、必须保证其内部所有属性也必须是可序列化的(默认情况下,基本数据类型可序列化)
4、ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量
代码
import java.io.*;
public class Serialize {
public static void main(String[] args) throws Exception {
//序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("hello.txt"));
oos.writeObject(new String("序列化"));
oos.close();
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("hello.txt"));
Object o = ois.readObject();
String s = (String) o;
ois.close();
System.out.println(s);
}
Apache Shiro 反序列化
用了AES加密的密钥,此密钥被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥
Apache Shiro 1.2.4 以及以前版本中,加密的用户信息序列化后存储在remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户的Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
产生原因:shiro默认使用看CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码—>AES解码—>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞
在构造恶意命令的时候:恶意命令—AES加密—base64编码—发送cookie
影响版本 Apache Shiro <=1.2.4
weblogic反序列化漏洞
- CVE-2017-10271 XMLDecoder反序列化漏洞
- CVE-2019-2725 远程命令执行漏洞
- CVE-2019-2618 任意文件上传
- CVE-2019-2615 Weblogic 任意文件读取漏洞
- CVE-2018-2826 Weblogic WLS Core Components 反序列化命令执行漏洞
- CVE-2020-14882 未授权让RCE
- CVE-2020-14644 Weblogic coherence组件iioo反序列化漏洞
- CVE-2020-14756 T3/IIOP反序列化RCE
- CVE-2021-2109 weblogic server 远程代码执行漏洞
XMLDecoder 反序列化漏洞原理
Weblogic 的 WLS Security 组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
CVE-2018-2826
Weblogic Server中的RMI 通信使用 T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到 Java虚拟机。T3协议在开放WebLogic控制台端口的应用上默认开启. 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击。
Weblogic已经将互联网暴露的PoC都已经加入了黑名单,如果要绕过他的黑名单的限制就只能自己动手构造。来看看InboundMsgAbbrev中resolveProxyClass的实现,resolveProxyClass是处理rmi接口类型的,只判断了java.rmi.registry.Registry,其实随便找一个rmi接口即可绕过。
影响版本
Oracle Weblogic Server10.3.6.0.0
Oracle Weblogic Server12.1.3.0.0
Oracle Weblogic Server12.2.1.2.0
Oracle Weblogic Server12.2.1.3.0
扫描工具 https://github.com/0xn0ne/weblogicScanner
fastjson
fastjson介绍
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
序列化 JavaBeanSerializer类 JSON.toJSONString()
反序列化用到的是JavaBeanDeserializer类 JSON.parse() 和 JSON.parseObject()
在Fastjson反序列化框架中JSON是门面类,提供一些静态方法,如parse,parseObject,其主要功能都是在DefaultJSONParser类中实现的。DefaultJSONParser引用了ParserConfig类,该类主要保存一些相关配置信息。也引用了JSONLexerBase类用来处理字符分析。
Tomcat反序列化
CVE-2020-9484
成功利用此漏洞需要同时满足以下4个条件:
-
攻击者能够控制服务器上文件的内容和文件名称
-
服务器PersistenceManager配置中使用了FileStore
-
PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象
-
攻击者知道使用的 FileStore 存储位置 到攻击者可控文件的相对路径
Apache
Apache Solr RCE—— CVE-2019-0192 安全版本:7.0
CVE-2018-1335:Apache Tika 命令注入
在Tika1.18 之前,用户可以发送精心构造的标头至tika-server,这些标头能够用来注入一些命令到运行tika-server的服务器的命令行中。此漏洞只影响向不受信用户开放并且运行tika-server的服务器。
Apache Axis1(<=1.4版本) RCE
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
ysoserial 工具利用此类漏洞
JBoss反序列化漏洞
- CVE-2017-12149 反序列化漏洞
- CVE-2017-7504 JBoss JMXInvokerServlet 反序列化漏洞
- JBoss远程代码执行漏洞
- Jboss JMX Console 未授权访问Getshell
JbossScan 一个简单探测 jboss漏洞的工具
ysoserial.jar 这个工具生成各种反序列化的poc或者exp,里面包含了各种各样的反射链所使用到的库
更多推荐
所有评论(0)