利用链分析
关于序列化与反序列化过程中使用的代理选择器以及代理这里就不再介绍了,代理(Surrogate)可以使得不能被序列化的类被序列化,具体的操作需要用户自行实现一个ISerializationSurrogate
接口并实现其GetObjectData
以及SetObjectData
方法。
TextFormattingRunProperties
实现了System.Runtime.Serialization.ISerializable
接口,故其在序列化以及反序列化过程中会自动执行GetObjectData
以及特定的构造方法internal TextFormattingRunProperties(SerializationInfo info, StreamingContext context)
我们直接从反序列化时执行的特殊构造方法创建对象的过程开始。
在调用构造方法创建对象期间会调用GetObjectFromSerializationInfo
方法从serializationInfo
中获取属性值。
本文详细介绍了 XmlSerializer 反序列化漏洞利用的 ObjectDataProvider 调用链路
本文总结了一些常见的Java动态代理InvocationHandler在反序列化中的作用,这些InvocationHandler根据其功能的不同往往能达成奇妙的效果,本文对这些类进行了梳理总结,方便漏洞挖掘时能够快速有效地串联其各个Gadgets形成有效的利用链。
变量名 | 默认值 | 含义 |
---|---|---|
DEFAULT_INITIAL_CAPACITY | 16 | 默认初始化容量 |
MAXIMUM_CAPACITY | 1 << 30 | 最大容量 |
DEFAULT_LOAD_FACTOR | 0.75 | 默认加载因子,当数组中元素数量超过总长度的0.75的时候会进行自动扩容 |
TREEIFY_THRESHOLD | 8 | 当链表长度超过8的时候会将链表转换为红黑树 |
UNTREEIFY_THRESHOLD | 6 | 当链表元素少于6的时候会将红黑树转换为链表 |
MIN_TREEIFY_CAPACITY | 64 | 只有当数组长度大于64的时候才会执行链表的树化,因为链表树化会增加空间复杂度,如果只要某一个链表长度超过8就进行树化得到的查询时间优化与增加的空间消耗两相比较是得不偿失的 |
xxxxxx
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) 的漏洞成因及修复方案