想必大家都读过追忆飘如墨师父的文章内容,Java反序列化信息绕WAF之加许多脏数据,在这篇文章之中师父指出了运用将gadget加上到结合种类进而可以完成加上脏数据,这儿我发现1个新姿势,启发也是来自追忆飘如墨师父的另文章内容的1个一笔带过的问题上.这本来是师父想要搞gadget检测的方法,但却失败了,但本着钻研的匠人精神,我对这个问题开展了进一步的探讨,这儿顺带对这个问题讲解.
为何这儿首个特性反序列化不成功,依然开启了URLDNS的整个过程
顺带这儿多提一嘴,为何以后师父指出的可以将URLDNS中的HashMap的键值对里将key或是object随意更换1个为须要检测的MEL就可以呢,实际上关键因素取决于是不是能开启以后的hash()变量!这儿有一个If辨别,大约是辨别目前是不是仍在块信息之中,如果是跳到下个块信息之中,每一个块隔开是运用0x78这一byte,因为这一byte是一个块的结束.下边是一个swich循环往复,运用下一字节来辨别,这儿假如都并非则会可以对下段开展反序列化!!!很神秘吧!因而目前咱们就能说明为何当时针对,这段源代码咱们可以顺利开启URLDNS的反序列化环节呢,没有错便是里边这一张图,他可以对下个块信息执行命令反序列化因而对HashMap的反序列化最后造成URLDNS完全开启.
在这儿当载入了Kkey=(K)s.readObject();因为类找不到抛出异常,以后再次对下一块信息开展反序列化,最后抛出异常后也无法再次载入下边的object=s.readObjet()了,更别提运用hash变量最后开启URLDNS,因而最后可以顺利.大伙儿千万不要可以像这样子,以前makeClass是返回的Class初始是拥有序列化接口的,这样子就造成尽管也可以弹出来计算器软件,但仅仅因为linkedList对里边的原素循环往复解析xml实行readObject的结果,而不是这篇指出的运用在ClassNotFoundException运用skipCustomData后载入下一块信息实行反序列化运用的环节.
还没有评论,来说两句吧...