Skip to content
Kurisu
Go back

Java 反序列化入门到 CC6:Shiro 550 与冰蝎内存马

Java 反序列化是我进阶阶段啃的第一块硬骨头——概念比 PHP 那边抽象,链子全靠工具生成,一开始完全是黑盒。这篇按我自己的理解顺序整理,从机制到 CC6、Shiro 550、再到内存马。

Java 序列化机制速览

CC6 链到底在干什么

CommonsCollections 的 CC 链里我最早看懂的是 CC6,因为它的路径最短:

java.util.HashMap.readObject()
  → hash(key)
    → TiedMapEntry.hashCode()
      → getValue()
        → LazyMap.get()
          → ChainedTransformer.transform()
            → InvokerTransformer 反射执行任意方法

我的理解方式:transformer 链就是一条”延迟执行的管道”,每个 Transformer 把自己能做的事转交给下一个,最后 InvokerTransformer 用反射执行 Runtime.exec()。HashMap 只是提供了一个”反序列化时必然触发”的入口。

工具直接用 ysoserial 生成,但建议至少跟一遍 CC6 的调用栈,不然用工具心里没底。

Shiro 550(rememberMe 反序列化)

冰蝎与内存马

传统文件型 WebShell 落地就有文件特征,内存马直接把恶意代码注册进运行中的容器(Filter/Servlet/Listener 型),不落盘、重启即消失

学习建议

Java 反序列化别一开始就啃 CC1(CommonCollections 最长那条),我的顺序是:URLDNS(看懂入口)→ CC6(最短链)→ Shiro 550(实战形态)→ 再回头看 CC1-CC5。环境用 vulhub 的 Shiro 靶场,半小时能起。


Share this post:

Previous Post
PHP 反序列化深入:POP 链构造思路与绕过手法
Next Post
WAF 绕过与免杀笔记:从规则原理到雷池实战