过滤器初始化
Struts2 的访问从配置的org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
过滤器开始。
过滤器在程序加载过程中首先被执行的是init
方法
1 | public void init(FilterConfig filterConfig) throws ServletException { |
Struts2 的访问从配置的org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
过滤器开始。
过滤器在程序加载过程中首先被执行的是init
方法
1 | public void init(FilterConfig filterConfig) throws ServletException { |
本文介绍了 Apache Struts2 S2-067 任意文件上传漏洞(CVE-2024-53677)的漏洞成因
在crushftp.server.ServerSessionHTTP.handle_http_requests
方法中对用户名有特殊处理。
当用户名中不包含~
的时候 lookup_user_pass
的值为true
1 | boolean lookup_user_pass = true; |
后面在调用 login_user_pass
方法的时候传入的第一个参数就是lookup_user_pass
1 | this.thisSession.login_user_pass(lookup_user_pass, false, user_name, user_pass)) |
本文介绍了 Apache Struts2 S2-066 任意文件上传漏洞(CVE-2023-50164) 的漏洞成因及修复方案
本文分析了 Tomcat 条件竞争导致远程代码执行(CVE-2024-50379/CVE-2024-56337)的漏洞成因以及修复方案
本文分析了WebFlux集成Spring-Security受限静态资源访问授权绕过(CVE-2024-38821)的漏洞成因以及修复方案
本文介绍了CVE-2025-22223: Spring Security authorization bypass for method security annotations on parameterized types 漏洞的漏洞原理以及修复措施
Spring-Security大小写敏感比较授权绕过(CVE-2024-38827)
Gadget Inspector 由 Ian Haken 于 2018 年 8 月在 DEF CON 上发布,其发布开创了Gadget 自动化挖掘的先河。Gadget Inspector 依靠Java ASM
技术,通过静态模拟 Java 程序运行过程中操作数栈以及局部变量表的动态变化来进行数据流跟踪从而实现污点分析进而进行Gadgets探测。
Gadget Inspector 的核心逻辑包含5个步骤,分别是类信息分析、数据传播分析、调用图构造、入口探测以及Gadgets串联。
在第一步中 Gadget Inspector 利用 MethodDiscovery 类对 当前环境中所有类的方法、成员、继承结构进行解析并集中存储在特定的数据结构中以便后续进行
数据传播分析以及调用图构造。
在第二步中 Gadget Inspector 利用 PassthroughDiscovery 类运用 深度优先算法、逆拓扑排序等方式进行数据流分析从而确认方法入参与返回值的关系,
即入参是否能够污染到返回值,其根本目的在于确认关键参数是否可以被攻击者控制。
在第三步中 Gadget Inspector 通过 Java ASM 技术构造方法调用图,其目的在于确认主调方法与被调用方法参数之间的关系。
第四步中 Gadget Inspector 通过 SourceDiscovery 针对不同的夫序列化类型进行分发,通过对比第一步中形成的methodMap中存储的方法信息与预定义
的反序列化 Gadget Source点进行比较,从而确定当前项目中可被使用的反序列化入口方法。
在第五步中 Gadget Inspector 开始从Source点开始遍历调用图,直到找到一个方法与预定义的sink点相匹配则说明Gadget Inspector 找到了一条可以
使用的反序列化调用链。
Scala 是一门多范式的编程语言,集成了面向对象编程和函数式编程的多种特性。函数式编程抽象的理论基础也让这门语言变得抽象起来,初学者需要花更多的时间去理解其特有概念以及众多的语法糖。Scala
是一门运行在JVM平台上的语言,其源码编译结果符合Java
字节码规范,所以可以被反编译为Java
代码。在进行Scala
代码审计的过程中,审计者很少有机会直面其源码,大多数时候都是被反编译为Java
的代码所支配。Scala
与Java
毕竟是两门语言,反编译成Java
代码的后果便是丧失了动态调试的能力(这为审计者带来了不小的麻烦),反编译后产生的中间代码、临时变量等辅助结构更是极大得降低了代码的可读性。本文将带领诸位抽丝剥茧逐步梳理出Scala
各语法结构与Java
语法结构对应关系,然后以两个漏洞的分析结尾。