0%

2023java反序列化随便乱记

JAVA反序列话串记

前言

java的反序列化看一些,ysoserial和fastjson以及shiro的,但是笔记没怎么做。这篇文章主要做笔记给自己看,把java反序列化中的链串一下,可能只有我自己能看懂吧😂。当然如果你已经跟完所有的ysoserial代码,这篇文章也可以帮你梳理。

URLDNS

URLDNS链是最简单的,调用链如下:

hashmap#readObject()–>Hashmap#Hash()–>URL#hashcode–>URLStreamHandler#hashcode()–>URLStreamHandler#getHostAddress

核心就是URLStreamHandler#hashcode()可以调用一个dns查询请求,把URLStreamHandler对象装载到URL对象中,再把URL对象放入hashmap的key,就可以触发。

CC1

transformer

Map#put()–>decorate()–>chaintransform#transform()–>后续就是一堆transformer的调用包括:invoketransformer、constant transformer、

如果自动Map#put(), 通过Annotation InvocationHandler的readObject满足。

lazymap

CC链中使用的CC1,通过lazymap get函数进行调用transform。其他和上面一样。

CC6

为了高版本的java反序列化绕过,8u71以上(AnnotationInvocationHandler加入了linkHashmap)

Hashset#readObject()–>Hashmap#put–>Hashmap#hash(key)–>TideMapEntry#hashcode–>this.getvalue()–>回到cc1的lazymap

也就是引入了Hashset和TideMapEntry

重点:outermap.remove(“keykey”), 因为序列化过程中已经hashcode一次了,就不再进入hashcode了,所以要移除。

CC3

结合了TemplateImpl加载字节码技术绕过seckiller,CC3绕过了Invokertransformer的限制,它调用TrAxFilter的构造方法,调用templates#newtransformer() 执行字节码。(InstiateTransformer)

CC4

结合CC3 但是这里用的是common-collection4里面的类,引入了PriorityQueue,最终调用一个comparator的compare来调用chaintransform,后半部分和CC3类似。也是加载字节码。

CB1

把CC4的PriorityQueue变成Beancomparator#compare()来触发Propertyutils#getProperty

PriorityQueue->compare()会调用Propertyutils->getProperty,正好走到TemplatesImpl的加载字节码调用链中。

TemplatesImpl#getOutputProperties()->TemplatesImpl#newtransformers()

fastjson

log4j

服务端安全组 应用安全。

应用安全,组件相关的漏洞上线前的东西。

工具 人工的代码审计。

专项治理。

SDL。

CTF 有专门蓝军。

10点-8点。

部门稳定性怎么样?挺稳定的。

黑白灰 SDL流程。

技术 + 研发能力 。


采用署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)许可协议
「分享也是一种学习」