JAVA安全-学习路线指南(持续更新)
环境准备
在调试代码的过程中,因为漏洞触发的版本可能均不相同,所以可能会用到不同版本的JDK,我记录一下我调试过程中所有的JDK,同时这里记录一下不同版本JDK的下载地址
- JDK7u80
- JDK8u66、8u71、8u73、8u121、8u231、8u431
Oracle官方JDK8下载
华为JDK镜像站
编程宝库JDK下载地址
InJDK下载地址/镜像源导航
JAVA语言 & 反射
Java 的 ASM、Javassist 和反射是安全研究的重要方向之一,主要集中在字节码操作和运行时行为分析上。ASM 和 Javassist 允许研究者直接操作字节码,进行漏洞利用链(Gadget Chain)的生成、恶意代码注入,以及对反序列化、动态代理等机制的深入分析;反射则是许多漏洞的核心,例如通过访问控制绕过、内存马注入或动态方法调用实现攻击。它们共同为研究 Java 平台的动态特性和潜在安全风险提供了技术支撑,是理解漏洞机制、开发利用工具和分析攻击链的基础。
- 反射机制: JAVA反射基础知识 + 修改被private final修饰的字段
- ClassLoader: BootstrapClassLoader + ExtClassLoader + AppClassLoader + 双亲委派
- 静态代理&动态代理: 静态代理 + Proxy动态代理
- ASM: 访问者模式 + 动态操作(访问/修改)class字节码
- RMI(远程方法调用): RMI基本原理 + 客户端/服务端/注册中心 攻击手法 + Bypass JEP290
- JNDI(命名空间及目录服务): JNDI基本概念 + JNDI/RMI攻击手法 + JNDI/LDAP攻击手法
- SPI机制: SPI基本概念 + SPI攻击
反序列化
JAVA反序列化安全学习笔记,下边的调试代码都是基于ysoserial中的代码来记录的。嗯~网上有很多魔改代码,但是如果想要标准系统化的学习的话还是要基于ysoserial这个反序列化漏洞的起源项目来学习。
- Java类转字节码工具: Java类转Base64编码字符串 + Base64编码字符串转.class文件
- 基础知识:反序列化漏洞的起源 + JAVA反序列化 + URLDNS
CC链
CommonsCollections(CC)
反序列化攻击链
- CC1攻击链:AnnotationInvocationHandler + Proxy + LazyMap + Transformer
- CC2攻击链:PriorityQueue + TransformingComparator + Transformer + TemplatesImpl
- CC3攻击链:AnnotationInvocationHandler + Proxy + LazyMap + Transformer + TrAXFilter + TemplatesImpl
- CC4攻击链:PriorityQueue + TransformingComparator + TrAXFilter + TemplatesImpl
- CC5攻击链:BadAttributeValueExpException + TiedMapEntry + LazyMap + Transformer
- CC6攻击链:HashSet + HashMap + TiedMapEntry + LazyMap + Transformer
- CC7攻击链:HashTable + TiedMapEntry + LazyMap + Transformer
CB链
CommonsBeanUtils(CB)
反序列化攻击链
内存马
内存马是一种无文件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内存马代码 + 运行
漏洞复现篇
准备把自己分析漏洞的过程都记录下来,然后分类(就按攻击手法来分类了,不按组件来分类了,感觉按照攻击手法来分类更容易学习),到时候回来想看的话也非常好找
JNDI注入
- log4j2 注入/远程代码执行 漏洞 CVE-2021-44228: log4j2漏洞点分析 + 代码分析 + JNDIExploit攻击工具分析
- log4j2 注入/远程代码执行-2 漏洞 WAF绕过 + 协议总结 + 信息泄露用法