Java反序列化Commons-Beanutils篇-CB链
<1> 环境介绍
jdk:jdk8u65
CB:commons-beanutils 1.8.3
pom.xml 添加
1 | <dependency> |
Java反序列化Commons-Beanutils篇-CB链
jdk:jdk8u65
CB:commons-beanutils 1.8.3
pom.xml 添加
1 | <dependency> |
Java反序列化Shiro篇01-Shiro550反序列化漏洞分析
Apache Shiro 是一个开源安全框架,提供身份验证、授权、密码学和会话管理
Shiro反序列化原理:Apache Shiro框架提供了 RememberMe 功能,用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。因此攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞
在 Apache Shiro<=1.2.4 版本中 AES 加密时采用的 key 是硬编码在代码中的,这就为伪造 cookie 提供了机会。只要 rememberMe 的 AES 加密密钥泄露,无论 shiro 是什么版本都会导致反序列化漏洞
Java反序列化Commons-Collection篇06-CC5链
jdk:jdk8u65
CC:Commons-Collections 3.2.1
pom.xml 添加
1 | <dependencies> |
Java反序列化Commons-Collection篇05-CC2链
jdk:jdk8u65
CC:Commons-Collections 4.0
pom.xml 添加
1 | <dependency> |
Java反序列化Commons-Collection篇04-CC4链
因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 不再继承 Serializable,导致无法序列化。
同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口,而CommonsCollections 3里是没有的。这个就提供了一个攻击的路径
jdk:jdk8u65
CC:Commons-Collections 4.0
pom.xml 添加
1 | <dependency> |
Java反序列化Commons-Collection篇03-CC3链
前两条 CC1和CC6利用invoke反射调用Runtime().getRuntime().exec()执行命令 很多时候服务器的代码当中的黑名单会选择禁用 Runtime
CC3是利用类加载机制,动态加载恶意类来实现自动执行恶意类代码的
这里测试环境为:
jdk:jdk8u65
CC:Commons-Collections 3.2.1
javac是用于将源码文件.java编译成对应的字节码文件.class。
其步骤是:源码——>词法分析器组件(生成token流)——>语法分析器组件(语法树)——>语义分析器组件(注解语法树)——>代码生成器组件(字节码)
先在方法区找class信息,有的话直接调用,没有的话则使用类加载器加载到方法区(静态成员放在静态区,非静态成功放在非静态区),静态代码块在类加载时自动执行代码,非静态的不执行;先父类后子类,先静态后非静态;静态方法和非静态方法都是被动调用,即不调用就不执行

Java反序列化Commons-Collection篇02-CC6链
实际上 CC6链子 又是CC1的一个变种 没有版本限制
找到这个漏洞的人又开辟出 一个新的线路 通过 TiedMapEntry.hashcode() 去触发 CC1里的 LazyMap.get()
这里我们是继续沿用的CC1 的项目
jdk版本:jdk8u65
pom.xml内容:
1 | <dependencies> |
Java反序列化Commons-Collection篇01-CC1链
因为CC1链在jdk 8u71后就修复了 因此我们复现就利用 8u65的版本
去官网下载 jdk8u65
https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html
然后去 下载openjdk
http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/af660750b2f4/
把下载的openjdk里 /share/classes/ 里面的 sun包 复制到 jdk1.8.0_65里
打开IDEA 新建一个Maven项目 选择 org.apache.maven.archetypes:maven-archetype-webapp
导入commons collections maven依赖
将下面写入到 pom.xml 里
1 | <dependencies> |
注解Annotation 是 JDK5.0 引入的一种注释机制
Annotation的作用:
Annotation的作用:
Annotation在哪里使用?