Java 反序列化取经路

Java 反序列化相关学习笔记、研究内容目录,持续更新ing...
(注:其实这种调用链非常复杂的漏洞调试文章,写出来基本没什么用,写的都是谁调用了谁,怎么想办法让这个 if else 走到这个调用点这一类的,如果只是为了构造 payload,那还好说,但是如果站在更高层面,如漏洞挖掘,0 day 防御这种目标的话,还是要了解思想,不能光看调用,而且如果你不自己动态调试,光看文章说的天花乱坠也是没用的,我在学的时候看其他人的文章也是一头雾水,调试过了才会理解构造的过程,不过依旧是一个学习记录的过程,当流水账般的日记发出来而已)
前置知识
- 背景描述 :反序列化漏洞的发现与提出
- 序列化与反序列化 :序列化与反序列化过程描述
- 反序列化漏洞 :反序列化漏洞描述
ysoserial 补全计划
特别鸣谢:0range 师傅的相关博客
以下红色为入口点(kick-off),紫色为触发点(sink),其余为中间的调用链(chain)
-
URLDNS :HashMap + URL
-
Commons Collections 1 :AnnotationInvocationHandler + LazyMap/TransformedMap + Transformer
-
Commons Collections 2 :PriorityQueue + TransformingComparator + Transformer/TemplatesImpl
-
Commons Collections 3 :AnnotationInvocationHandler + LazyMap + Transformer + TrAXFilter + TemplatesImpl
-
Commons Collections 4 :PriorityQueue/TreeBag + TransformingComparator + Transformer + TrAXFilter + TemplatesImpl
-
Commons Collections 5 :BadAttributeValueExpException + TiedMapEntry + LazyMap + Transformer
-
Commons Collections 6 :HashMap/HashSet + TiedMapEntry + LazyMap + Transformer
-
Commons Collections 7 :Hashtable + TiedMapEntry + LazyMap + Transformer
-
Commons Beanutils :PriorityQueue + BeanComparator + CaseInsensitiveComparator + TemplatesImpl
-
Hibernate1 :HashMap + TypedValue + PojoComponentTuplizer + GetterMethodImpl/BasicGetter + TemplatesImpl
-
Hibernate2 :HashMap + TypedValue + PojoComponentTuplizer + GetterMethodImpl/BasicGetter + JdbcRowSetImpl
-
Groovy1 :AnnotationInvocationHandler + ConvertedClosure + MethodClosure
-
FileUpload1 :DiskFileItem + DeferredFileOutputStream
-
MozillaRhino1 :BadAttributeValueExpException + NativeError + NativeJavaMethod + NativeJavaObject + MemberBox + TemplatesImpl
-
MozillaRhino2 :NativeJavaObject + JavaAdapter + NativeJavaArray + Environment + JavaMembers + TemplatesImpl
-
Myfaces1 :HashMap + ValueExpressionMethodExpression + ValueExpression
-
Myfaces2 :HashMap + ValueExpressionMethodExpression + ValueExpression
-
ROME1 :HashMap + ObjectBean + EqualsBean + ToStringBean + TemplatesImpl
-
BeanShell1 :PriorityQueue + XThis$Handler + This +BshMethod
-
C3P0 :PoolBackedDataSourceBase + ReferenceIndirector + ReferenceableUtils + URLClassLoader
-
Click1 :PriorityQueue + Column$ColumnComparator + PropertyUtils + TemplatesImpl
-
Vaadin1 :BadAttributeValueExpException + PropertysetItem + NestedMethodProperty + TemplatesImpl
-
AspectJWeaver :HashSet + TiedMapEntry + LazyMap + SimpleCache$StorableCachingMap
-
Jython :PriorityQueue + Comparator + XThis$Handler + PyFunction + PyBytecode
-
JavassistWeld :InterceptorMethodHandler + SimpleInterceptionChain + SimpleMethodInvocation + TemplatesImpl
-
JBossInterceptors :InterceptorMethodHandler + SimpleInterceptionChain + SimpleMethodInvocation + TemplatesImpl
其他反序列化
一些项目的了解和学习
ysuserial
魔改
目前已经完成魔改尝鲜版,支持了若干功能,可以在如下地址观看:
https://github.com/su18/ysoserial
已经打包好的 jar 包点击如下链接下载:
https://github.com/su18/ysoserial/releases/download/v0.1/ysuserial-0.1-su18-all.jar
一些总结
AnnotationInvocationHandler 作用
在反序列化 gadget 中多次遇到 AnnotationInvocationHandler 这个类,那么他在反序列化漏洞的利用中都可以起到什么样的作用呢?
一些以前没有注意过的点
- Method 对象可以反序列化出去用
- 之前提到反序列化,一直盯着类的 readObject 方法看,实际上一个类的相关漏洞 writeObject 方法也许更重要。
Class.forName()
可以指定 ClassLoader。
漏洞调试有感
弹计算器比找女朋友有意思多了。