CVE-2022-22947——Spring Cloud Gateway 学习 & SpEL 的多种注入

CVE-2022-22947 的起因是作者 @Wyatt 在 Bring Your Own SSRF – The Gateway Actuator 一文中提及到利用 Spring Cloud Gateway Actuator 构造 SSRF,之后该作者利用发现的暴露的 Actuator 执行器,在 CVE-2022-22947: SpEL Casting and Evil Beans 中讲到: /actuator/gateway/routes/创建路由并在 filters字段插入一个 SpEL 表达式,Spring Cloud Gateway 在处理过滤器时会执行该表达式,通过构造恶意 SpEL 可实现 RCE。 ...

EL 表达式注入

EL 表达式注入 1、EL 概述 表达式语言(Expression Language) 简称 EL,是 Java EE(尤其是 JSP 技术)中用来在页面中简化访问 Java 对象、属性、集合和方法的一种语法。它的主要作用是取代 JSP 页面中复杂的 <%= ... %> 表达式,让 JSP 页面更简洁、可读性更高。 ...

SpEL 表达式注入

SpEL 表达式注入 1、SpEL 基础 1.1 简介 在 Spring3 中引入了 Spring 表达式语言(Spring Expression Language,简称 SpEL),是一种强大的运行时查询和操作对象图的语言,语法类似于Jakarta表达语句,但额外支持方法调用和基本字符串模板。SpEL旨在为Spring社区提供一种统一且功能全面的表达式语言,适用于所有Spring产品,并根据这些产品的需要设计了其特性。尽管SpEL是Spring框架的一部分,但它可以独立于Spring使用。通常情况下,用户只需编写简单的表达式字符串即可利用SpEL的功能,无需关心底层架构细节。例如,在基于XML或注解的bean定义中集成SpEL就是一个常见应用。 ...

Java内存马——Tomcat Valve型的三种注入

Java内存马——Tomcat Valve型的三种注入 转载自:https://www.freebuf.com/articles/web/433972.html 核心原理 **Tomcat Pipeline & Valve:**Tomcat 使用责任链模式处理请求。Pipeline包含多个Valve,每个Valve负责特定任务(如认证、日志、访问控制)。StandardWrapperValve(通常位于链尾) 最终调用 Servlet。 **StandardContext:**代表一个 Web 应用,持有其对应的Pipeline对象 (StandardContext#getPipeline())。 **目标:**将恶意Valve注入到目标 Web 应用StandardContext的Pipeline中,通常是插入在StandardContextValve(负责应用级路由) 和StandardWrapperValve(负责调用 Servlet) 之间,或者尽可能靠前(如紧接在AccessLogValve之后)。恶意 Valve 的invoke()方法检查特定请求特征,匹配则执行命令并截断管道(不再调用getNext().invoke()),直接返回响应。 注入方式详解 方式一:纯反射注入(无依赖) 场景:攻击者已通过漏洞(如反序列化、文件上传 Webshell、其他 RCE)获得代码执行能力,但当前执行环境没有 Tomcat 的catalina.jar等库依赖(例如在Bootstrap ClassLoader或Common ClassLoader加载的类中执行)。这是最通用的方式。 ...

Java 内存马第四篇 - Agent 内存马

Java 内存马第四篇 - Agent 内存马 四、 Java Agent 内存马 4.1 Java Agent示例 对于Agent(代理)来讲,其大致可以分为两种,一种是在JVM启动前加载的**premain-Agent**,另一种是JVM启动之后加载的**agentmain-Agent**。这里我们可以将其理解成一种特殊的Interceptor(拦截器),如下图 ...

Java 内存马第三篇 - Spring 内存马

Java 内存马第三篇 - Spring 内存马 三、Spring 内存马 1、Controller 内存马 一些基础知识: Bean Bean 是 Spring 框架的一个核心概念,它是构成应用程序的主干,并且是由 Spring IoC 容器负责实例化、配置、组装和管理的对象。 ...

Java 内存马第二篇 - Tomcat 内存马

Java 内存马第二篇 - Tomcat 内存马 二、Tomcat 内存马 1. Filter 内存马 Filter 我们称之为过滤器,是 Java 中最常见也最实用的技术之一,通常被用来处理静态 web 资源、访问权限控制、记录日志等附加功能等等。一次请求进入到服务器后,将先由 Filter 对用户请求进行预处理,再交给 Servlet。 ...

Java 内存马第一篇 - 基础

Java 内存马第一篇 - 基础 一、基础: 1. 什么是内存马 无文件的 webshell 内存马又名无文件马,见名知意,也就是无文件落地的 webshell 技术,是由于 webshell 特征识别、防篡改、目录监控等等针对 web 应用目录或服务器文件防御手段的介入,导致的文件 shell 难以写入和持久而衍生出的一种“概念型”木马。这种技术的核心思想非常简单,一句话就能概括,那就是对访问路径映射及相关处理代码的动态注册。 ...

FastJson反序列化

FastJson反序列化 基础 官方源码: https://github.com/alibaba/fastjson 使用手册: https://www.w3cschool.cn/fastjson/ Fastjson是一个Java库,可用于将Java对象转换为它们的JSON表示。它还可以用于将JSON字符串转换为等效的Java对象。Fastjson可以处理任意Java对象,包括没有源代码的预先存在的对象。 ...

Shiro反序列化

Shiro反序列化 Shiro反序列化 参考文章: Shiro反序列化漏洞笔记一(原理篇) 环境搭建 直接从github上clone代码到本地。 plain 1 2 3 git clone https://github.com/apache/shiro.git cd shiro git checkout shiro-root-1.2.4 修改 pml.xml(路径为 \shiro\samples\web\pom.xml) ...