首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原创Paper |Struts2 历史 RCE 学习与研究:附最新 S2-066(CVE-2023-50164)

图2 ognl.OgnlContext#get 3.2.3.3 AST树 在compile中会调用关键函数Ognl.parseExpression解析给定OGNL表达式并返回一个表达式树形表示,该表示可以...图10 OgnlRuntime.class 总结一下上述内容:在Struts2中,如果传入表达式类型为ASTStaticMethod,将调用OgnlRuntimecallStaticMethod方法...在创建对象new Object时,实质上是调用 ASTCtor 类型结构表达式。...,将文件名设置为upload.png,再次调用了我们自己传递uploadFileName,将文件名设置为了我们自定义值,最终造成了目录穿越,如图37。...我们不对任何人因使用本仓库信息而导致非法活动承担责任。用户应遵守适用法律法规,并在进行安全研究时恪守道德法律规定。请谨慎使用这些漏洞信息,并确保在任何测试研究活动中遵循法律道德准则。

47710
您找到你想要的搜索结果了吗?
是的
没有找到

Struts2工作原理

Java API一个很小子集,这样我们可以在业务逻辑部分使用功能强大Java语言进行程序设计。...工作原理 Suruts2工作原理可以用下面这张图来描述,下面我们分步骤介绍一下每一步核心内容 ?...可选过滤器,这个过滤器对于Struts2其他框架集成很有帮助,例如:SiteMesh Plugin) 3、接着FilterDispatcher调用,FilterDispatcher询问ActionMapper...7、ActionInvocation实例使用命名模式来调用,在调用Action过程前后,涉及到相关拦截器(Intercepter)调用。...Struts2struts1比较 struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看: 从体系结构来看:struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器

63740

Java程序员面试题集(86-115)

Java程序员面试题集(86-115) 摘要:下面的内容包括Struts 2Hibernate常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC...异军突起更加加速了Struts 2陨落,但面试中仍然有可能问及此框架相关内容,毕竟Struts 2曾经阿里巴巴、京东以及政府企业门户网站广泛采用。...其中,模型代表了应用程序数据处理这些数据规则,同时还可以为视图提供查询保存相关状态,通常由JavaBean来实现,模型代码写一次就可以多个视图重用;视图用来组织模型内容,它从模型中获得数据...destory()方法将在拦截器销毁之前调用, 它在拦截器生命周期内也只调用一次。 项目中使用有权限拦截器、执行时间拦截器、令牌拦截器等。 96、如何在Struts2中使用Ajax功能?...)、多编程语言支持(能够同时使用多种语言开发)、文档质量(常见用例问题都在文档中有体现)、出版图书(有没有行业专家使用了它并分享了自己使用经验)、REST支持(能按HTTP协议设计宗旨使用该协议

1.8K70

Java开发必会框架Struts2第二天

2.2、动作类实体模型分开 问题: 由于我们没有初始化user对象,默认为null,一调用setUser方法,就空指针异常了。但是框架却封装进去值了。...String/String[]————填充模型(set方法)————>POJO(plain old java object) pojo中有java数据类型。...显示错误提示:借助Struts2标签库。 回显数据:使用struts2标签库生成表单。(建议使用) 错误信息中文提示:使用struts2国际化。...国家代码:有iso规定 当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同语言环境找对应语言环境资源包,当没有时,找默认。...每个资源包内容都由相同key对应语言环境value组成。

1.1K80

Java文件上传与下载【面试+工作】

ServletDownload.java : ? ? 重启tomcat服务器,即可实现对压缩包对图片下载。 ---- 2、struts如何实现文件上传下载?...)方法名去掉get 一致 Struts2下载文件实现说明 contentType 内容类型互联网MIME标准中规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image...struts.xml ? ? 3、批量下载 使用多线程并发调用单个文件下载方法即可。 4、断点续传 有待研究。。。。。。。。。。...但是如果该文件文件名为中文文件名,在某些早起浏览器上就会导致下载失败;如果使用最新Firefox、Chrome、Opera、Safari则都可以正常下载文件名为中文文件了。...SpringMVC提供了一个ResponseEntity类型使用它可以很方便地定义返回HttpHeadersHttpStatus。以下代码演示文件下载功能: ?

3.7K40

Java开发必会框架Struts2第一天

Struts2就是apacheOpenSymphony组织合并开发出来。 里面包含了WebWork2核心及Struts一些特性功能。除此之外,Struts1没有任何关系了。...九、Struts2配置文件 1、加载时机: 当应用tomcat加载时候,struts2配置文件就已经加载过了。...2.4、动作访问 a.使用通配符: ? 升级版: ? 优先级:绝对匹配优先。使用通配符按照在配置文件中先后顺序进行匹配。 b.动态方法调用 ? ? ?...十二、结果类型视图 ( 逻辑结果视图 ) 前奏:该部分内容就是struts配置文件中result元素使用 1、result元素 作用: 为动作指定结果视图 属性: name:逻辑视图名称,对应着动作方法返回值...4、自定义结果类型 通过前面的内容,我们看出,其实结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口。

83780

day26_Struts2学习笔记_03

国家代码:由iso规定。    当文件只有 主要文件名.properties 时,表明它是 默认资源包。浏览器会根据不同语言环境找对应语言环境资源包,当没有找到时,找默认。    ...每个资源包内容都由 相同key 对应语言环境value 组成。    ...但是在没有写动作类动作方法之前,不确定方法名叫什么。   解决办法:哪个动作方法需要使用拦截器,我就给它注入参数。 ?...配置文件struts.xml: ? 动作类: ? 运行结果:没有问题,就不上图啦! 5、文件下载:其实就是一种结果类型(Stream) 动作类: ? 配置文件: ?...运行结果:没有问题,就不上图啦! 问题:文件名不能在配置文件中写死,需要根据实际情况获取。 解决办法: 动作类: 在下面的讲解中。

47210

一文读懂SpringMVC中文件上传与下载

而在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输内容类型 Content-Type 为 multipart/form-data; boundary=流分隔符值 来上传文件,这个流分隔符用来区分一个文件上传开始结束...1.2 文件下载 通过在响应消息头中设置 Content-Disposition Content-Type 使得浏览器无法使用某种方式或者激活某个程序来处理 MIME 类型文件,来让浏览器提示是否保存文件...这个地方困扰不止我一个人,这个 BUG SpringMVC 无关, Tomcat 一个属性有关系,请看下图,网上有人说 Tomcat7 就没有这个问题,但这不是推荐解决问题方式。 ?...; return "fileupload"; } SpringMVC 中使用 MultipartFile 对象来接收上传文件,通过这个对象可以得到文件文件名和文件类型,通过 transferTo...文件下载效果图.gif 2.2 文件下载 下载页面我使用了 Jquery 动态生成下载列表对 url 提前做了编码处理,防止文件名中 # 号等特殊字符干扰,并对显示文件名做了去除 UUID 值处理

1.6K40

day25_day27_Struts2_学习回顾

答:         Struts2配置文件加载时机:当应用tomcat加载时候,struts2配置文件就已经加载过了。         ...只有没有元素包,才能定义为抽象包。         namespace属性:名称空间。...示例: 张三 2、动作类模型分开动态封装请求参数,setget方法是怎么调用?     ...答:         主要文件名_语言代码_国家代码.properties         主要文件名.properties(默认资源包) 2、Struts2中全局范围资源包、包范围资源包动作类范围资源包...表达式时使用,例如:在文件下载时,文件名编码:struts.xml --> ${@java.net.URLEncoder.encode(filename)} 3.3、%    在struts2中,有些标签

54650

Struts2笔记

c、在应用构建路径顶端(WEB-INF\classes),建立struts2配置文件。默认文件名struts.xml ?...第一个Struts2入门案例 a、建立一个hello.jsp页面 ? b、修改struts2默认配置文件:struts.xml,增加以下内容 ? c、建立动作类动作方法 ?...= false 是否允许动态方法调用 struts.multipart.maxSize=2097152 文件上传时大小限制 Struts.xml可以有多个 主配置文件叫struts.xml,假设单独模块配置文件叫...实现了com.opensymphony.xwork2.Action 定义了 表单域校验、错误信息设置获得国际化信息相关一些方法 动作类生命周期 动作类每次访问都会重新实例化,是线程安全。...动作方法:动作类中定义处理业务有关方法 特点(重要):public 返回值类型是String 方法没有任何参数 动作方法通配符匹配 ? 动作方法动态调用 ?

36530

Struts2【拦截器】

什么是拦截器 拦截器Interceptor…..拦截器是Struts概念,它与过滤器是类似的…可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts时候已经讲解过了,Struts为我们实现了很多功能...这里写图片描述 从效果图我们可以看出,他们执行顺序是这样: 当服务器开启时候,会执行拦截器init()方法 当访问Action时,Action实例创建 创建完Action实例,会调用拦截器interceptor...拿到Action具体信息【成员变量、settergetter】 执行拦截器具体内容,根据Action具体信息,把web端数据封装到Action上 最后在execute()就可以得到封装后数据了...放在隐藏域中…一起带过去给Servlet Servlet判断用户有没有带token值过来,判断token值是否Session相匹配 如果用户是第一次提交的话,那么就允许用户请求,接着就把保存在Session...,但当我们如果提交之后,再刷新页面,那么表单数据就会重复提交…我们使用Struts2我们提供防止表单重复提交功能把!

84550

day25_Struts2学习笔记_01

除此之外,Struts1没有任何关系了。 六、搭建开发环境 Struts2下载安装 开发包目录结构 ?...struts2体系结构图如下: ? 九、Struts2配置文件加载时机和加载顺序   加载时机:当应用tomcat加载时候,struts2配置文件就已经加载过了。  ...只有没有元素包,才能定义为抽象包。     namespace属性:名称空间。...*         原始 老 java 对象   *         Plain Old Java Object   *         POJO类是指没有实现任何接口以及除了Object类以外,没有继承任何父类...> 3、自定义结果类型及其配置 通过前面的内容,我们看出,其实结果类型就是一个类:     这些类都实现了com.opensymphony.xwork2.Result接口。

49910

Struts2【开发Action】

这里写图片描述 ---- 小总结 如果我们使用到了Struts2一些特用功能,我们就需要继承ActionSupport 如果我们没用到Struts2特殊功能,只要平凡写一个Java类行了。...但是呢,日期类型只支持是yyyy-MM-dd这种格式,因为我们在上个例子中直接使用Struts支持格式,因此没有报错…本篇博文就是讲解Struts如何对日期类型格式更好地支持 当我们使用是yyyyMMdd...xwork-conversion.properties文件 配置文件内容:需要转换类型=转换器类全名java.util.Date=qwer.MyConvter ---- 局部转换器类 步骤:...这里写图片描述 文件上传下载 在讲解开山篇时候就已经说了,Struts2框架封装了文件上传功能……..本博文主要讲解怎么使用Struts框架来完成文件上传下载 回顾以前文件上传 首先,我们先来回顾一下以前...对象、上传文件名称、上传文件类型 package fileupload; import java.io.File; /** * Created by ozc on 2017/5/2. */ public

1.2K60

文件上传 = 拖拽 + 多文件 + 文件夹

一个「专注于前端开发技术/Rust及AI应用知识分享」Coder 前言 今天呢,大家聊点耳熟能详东西。「文件上传」。 讲到这里,大家不要嗤之以鼻,认为这不是分分钟就用组件库实现?...所以,我们就选用react-dropzone作为我们拖拽解决方案。 拖拽组件 既然,材料食谱都已经确定,那我们就需要烹饪我们膳食了。...按照SPA尿性,那岂不是需要在一个路由组件根部。没错,它就是这样。 组件挂载位置 我们先把内部代码扔下,我们先来讲讲FullScreenDropZone是从哪里调用。...查看react-dropzone使用方式,其实我们还缺少input处理。用于接收getInputProps 但是,在上面代码中我们丝毫没看到关于inputgetInputProps处理。...结合,在第二节中我们使用react-dropzone处理文件拖拽时,也需要一个接收返回getInputProps属性。

13610

struts2面试整理

默认struts-default有什么作用 struts-default包是由struts内置,它定义了struts2内部众多拦截器Result类型,而Struts2很多核心功能都是通过这些内置拦截器实现...,当包继承了struts-default包才能使用struts2为我们提供这些功能。...值栈 ValueStack生命周期为Action生命周期,保存在request域中, 每个action都有与之对应值栈,action对象默认保存在栈顶 使用OGNL访问值栈中内容不需要添加# 而访问其他域中需要添加...拦截器 每个拦截器都是实现了Interceptor接口java类 Init() 在这个拦截器初始化时候调用 intercept() 当拦截器起作用时候调用 destroy() 在拦截器销毁时候调用...文件上传 file域 form表单enctype=multipart/form-data 提交方式为post action接受文件对象为表单中name, 文件类型为name+ContentType 文件名字为

54800

Java开发框架必会Struts2第三天

今天内容全都是重点 一、Struts2中拦截器(特别重要) 1、拦截器重要性 Struts2中很多功能都是由拦截器完成。...但是在没有写动作类动作方法之前,不确定方法名叫什么。 解决办法:我们需要在使用拦截器时候给它注入参数。 ? 4.3、拦截器类视图(全): ?...2、OGNL功能 前提:OGNL是struts2整合一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库 2.1、支持普通方法调用 ? ?...contextMap中存放主要内容 Key Value 说明 value stack (root) java.util.List 没有root这个key。它是一个list。...六、Struts2对EL改变 1、Struts2中使用EL问题: 前提: 我们应该知道,如果我们没有往值栈(根)中放入数据的话,那么我们动作类默认是在值栈栈顶。 ? ? ? ?

885100

Apache Struts2 Remote Code Execution (S2-046)

file upload Multipart parser Description s2-046这个漏洞其实s2-045漏洞触发本质是一样,都使用了同一个异常处理方法,且异常信息中含有ognl表达式导致命令执行...,而不同则是触发异常点不同而已,s2-045异常触发是由于content-type中存在无法解析内容,而s2-046则由content-length过大和上传文件名不合规造成,接下来我们分别对这两种情况进行分析...Vulnerability Analysis 首先我们再回顾一下关于s2-045分析,MultiPartRequestWrapper.java使用了解析函数对上传请求进行了解析,而JakartaMultiPartRequest.java...by default struts.multipart.saveDir= struts.multipart.maxSize=2097152 分析至此异常触发原理已明了,那么根据我们最早结论,异常中必须得含有可控内容才能传入...null,当文件名中包含空字符时就会抛出异常,异常信息中会带入filename字段,而JakartaStreamMultiPartRequest.javaparse函数中buildErrorMessage

63230

Java Web安全之代码审计

可能你会说java编译class不是说不可以加密?...Find命令 find命令并不能支持Java反编译,但是find命令可以非常方便搜索经过编译后二进制文件中内容,所以有的时候使用find命令通常是最简单实用,直接解压jar包然后使用find命令搜索...借助IDEA方法调用链搜索功能就可以很轻松找出方法调用触发点。 选择类或者方法名→右键→Find Useages或者使用快捷键⌥F7 ? 四、Java Web基础 1....FilterServlet一样是Java Web中最为核心部分,使用ServletFilter可以实现后端接口开发权限控制,当然使用Filter机制也可以实现MVC框架,Struts2实现机制就是使用...修复JDK版本所有跟文件名相关操作都调用了isInvalid方法检测,防止空字节截断。 ?

2K30
领券