嗨,师傅们,我是从2024年底开始踏入Java安全领域的新手。从零开始学,走过不少弯路,也遇到不少“师傅们”默认你已懂的代码细节,比如FastJson TemplatesImpl漏洞利用中那一大段base64脚本(还是截图),真是调试不起来啊!
因此,这个仓库记录了我从最初迷茫到逐步掌握Java安全技术的全过程。不论是漏洞原理解析、代码调试,还是IDEA调试Tomcat的实战技巧,我都力求把每一步讲得清清楚楚,帮助同样处于起步阶段的小伙伴们避开那些坑。
欢迎师傅们指点,喜欢的朋友也别忘了点个Star,共同见证从0到1的成长旅程!
如果看完本笔记,你有不理解的地方,欢迎在issue中提问题哦~ 我会持续优化这份学习笔记。
在基础篇内容中主要提及字节码技术(ASM、Javassist)、反射、JNDI、RMI、SPI等内容,这些知识会在反序列化链中被应用。同时也会记录一些小知识,比如IDEA中的Debug技巧、Java中的反弹shell等。
- 反射机制: JAVA反射基础知识 + 修改被private final修饰的字段
- ClassLoader: BootstrapClassLoader + ExtClassLoader + AppClassLoader + 双亲委派
- 静态代理&动态代理: 静态代理 + Proxy动态代理
- ASM: 访问者模式 + 动态操作(访问/修改)class字节码
- RMI(远程方法调用): RMI基本原理 + 客户端/服务端/注册中心 攻击手法 + Bypass JEP290
- JNDI(命名空间及目录服务): JNDI基本概念 + JNDI/RMI攻击手法 + JNDI/LDAP攻击手法
- SPI机制: SPI基本概念 + SPI攻击
- Debug Tomcat源码: Tomcat安装 + IDEA创建JAVA WEB项目 + IDEA开启调试Tomcat
- 为什么Java的反弹Shell这么奇怪: Runtime的解析规则 + Base64编码 + 反弹shell示例
- IDEA调试技巧: 关闭toString + maven依赖源码下载
在 Java 安全领域,Java 反序列化漏洞 和 JNDI 注入 是两种常见且严重的安全威胁,攻击者可以利用它们进行 远程代码执行(RCE),从而控制目标服务器。
- 反射机制: JAVA反射基础知识 + 修改被private final修饰的字段
- ClassLoader: BootstrapClassLoader + ExtClassLoader + AppClassLoader + 双亲委派
- 静态代理&动态代理: 静态代理 + Proxy动态代理
- Java类转字节码工具:Java类转Base64编码字符串 + Base64编码字符串转.class文件
- 基础知识:反序列化漏洞的起源 + JAVA反序列化 + URLDNS
- 详解TemplatesImpl反序列化:XSLT + Templates + TransletClassLoader
- AmazingCode (1)绕过构造方法的限制:Object默认构造 + 创建目标无参构造实例
- 从一个Demo示例学习序列化协议: 反序列化工具介绍 + 反序列化Demo调试 + 010Editor修改字节码
- 序列化协议-官方文档(翻译 + 补充): 官方文档翻译 + 内容补充
这里主要以调试ysoserial
中的攻击链为主,可能也会在此基础上进行改进、补充。
每篇文章都会记录依赖库版本、JDK版本、基础知识、可单个java文件运行的poc,适合小白调试反序列化。
- CommonsCollections1:AnnotationInvocationHandler + Proxy + LazyMap + Transformer
- CommonsCollections2:PriorityQueue + TransformingComparator + Transformer + TemplatesImpl
- CommonsCollections3:AnnotationInvocationHandler + Proxy + LazyMap + Transformer + TrAXFilter + TemplatesImpl
- CommonsCollections4:PriorityQueue + TransformingComparator + TrAXFilter + TemplatesImpl
- CommonsCollections5:BadAttributeValueExpException + TiedMapEntry + LazyMap + Transformer
- CommonsCollections6:HashSet + HashMap + TiedMapEntry + LazyMap + Transformer
- CommonsCollections7:HashTable + TiedMapEntry + LazyMap + Transformer
- CC2+CC5:BadAttributeValueExpException + TiedMapEntry + LazyMap + ChainedTransformer + TrAXFilter + TemplatesImpl
- CommonsBeanUtils1:PriorityQueue + BeanComparator + TemplatesImpl
- JDK7u21:HashSet + HashMap + AnnotationInvocationHandler + TemplatesImpl
- Groovy:AnnotationInvocationHandler + ConvertedClosure + MethodClosure
- FileUpload:DiskFileItem + DeferredFileOutputStream
- Wicket:FileUpload Gadget chain
- Hibernate1:HashMap + TypedValue + ValueHolder + DeferredInitializer + ComponentType + PojoComponentTuplizer + BasicPropertyAccessor$BasicGetter / GetterMethodImpl + TemplatesImpl
- Hibernate2:HashMap + TypedValue + ValueHolder + DeferredInitializer + ComponentType + PojoComponentTuplizer + BasicPropertyAccessor$BasicGetter / GetterMethodImpl + JdbcRowSetImpl
- Spring1:MethodInvokeTypeProvider + TypeProvider + ObjectFactoryDelegatingInvocationHandler + AnnotationInvocationHandler + TemplatesImpl
- Spring2:MethodInvokeTypeProvider + TypeProvider + AnnotationInvocationHandler + JdkDynamicAopProxy + TemplatesImpl
- MozillaRhino1: BadAttributeValueExpException + NativeError + ScriptableObject + IdScriptableObject + NativeJavaMethod + MemberBox + TemplatesImpl
- SnakeYAML 反序列化:SnakeYAML代码分析 + SPI + JdbcRowSetImpl
- JNDIExploit攻击工具分析:JNDI-Injection-Exploit
- JdbcRowSetImpl分析:connect + getDatabaseMetaData + setAutoCommit + prepare + execute
- log4j2 注入/远程代码执行 漏洞 CVE-2021-44228:log4j2漏洞点分析 + 漏洞代码分析
- log4j2 注入/远程代码执行-2 漏洞:WAF绕过 + 协议总结 + 信息泄露用法
内存马是一种无文件Webshell,简单来说就是服务器上不会存在需要链接的webshell脚本文件。 传统webshell会在目标服务器中留存具体的payload文件,但现在安全软件对于静态webshell的查杀能力已经非常的强,可能payload文件在写入的一瞬间就会被查杀,而内存马的原理就是在web组件或者应用程序中,注册一层访问路由,访问者通过这层路由,来执行我们控制器中的代码,一句话就能概括,那就是对访问路径映射及相关处理代码的动态注册。
- JAVA WEB & Tomcat: Servlet + Filter + Listener + Connector(连接器) + Container(Servlet容器)
- JAVA WEB环境搭建: Tomcat安装 + IDEA创建JAVA WEB项目 + IDEA开启调试Tomcat
- Servlet内存马: Context概念 + Debug Servlet加载过程 + 补充内容
- Listener内存马: Listener示例 + ApplicationListener Debug + Listener内存马代码
- Filter内存马: Filter代码Debug + Filter内存马代码 + 运行
- TOCTOU竞争导致的Tomcat任意代码执行CVE-2024-50379
一直在学Java安全相关的内容,一直没地方实践,让我挖一条新的利用链又不现实,自己也不太能找到好玩的靶场,也不想准备环境。突然就想到做一些CTF题目了,好玩还能加深一下知识点的印象,下边就是一些关于Java安全的题目,主要来自于BUUCTF平台,不过我看BUU上边并没有很多Java安全的题目,还有兄弟们知道哪些oj平台有好玩的Java安全CTF题目吗。