Java反序列化Commons-Beanutils篇-CB链

<1> 环境介绍

jdk:jdk8u65
CB:commons-beanutils 1.8.3
pom.xml 添加

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
阅读更多

Java反序列化Shiro篇01-Shiro550反序列化漏洞分析

<1> Shiro介绍

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链

<1> 环境分析

jdk:jdk8u65
CC:Commons-Collections 3.2.1
pom.xml 添加

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
阅读更多

Java反序列化Commons-Collection篇05-CC2链

<1> 环境分析

jdk:jdk8u65
CC:Commons-Collections 4.0
pom.xml 添加

1
2
3
4
5
<dependency>  
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>
阅读更多

Java反序列化Commons-Collection篇04-CC4链

<1>环境分析

因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 不再继承 Serializable,导致无法序列化。
同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口,而CommonsCollections 3里是没有的。这个就提供了一个攻击的路径

jdk:jdk8u65
CC:Commons-Collections 4.0
pom.xml 添加

1
2
3
4
5
<dependency>  
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>
阅读更多

Java反序列化Commons-Collection篇03-CC3链

<1> 环境分析

前两条 CC1和CC6利用invoke反射调用Runtime().getRuntime().exec()执行命令 很多时候服务器的代码当中的黑名单会选择禁用 Runtime

CC3是利用类加载机制,动态加载恶意类来实现自动执行恶意类代码的

这里测试环境为:
jdk:jdk8u65
CC:Commons-Collections 3.2.1

阅读更多

Java基础篇-类加载机制

<1>Javac原理

javac是用于将源码文件.java编译成对应的字节码文件.class。
其步骤是:源码——>词法分析器组件(生成token流)——>语法分析器组件(语法树)——>语义分析器组件(注解语法树)——>代码生成器组件(字节码)

<2>类加载过程

先在方法区找class信息,有的话直接调用,没有的话则使用类加载器加载到方法区(静态成员放在静态区,非静态成功放在非静态区),静态代码块在类加载时自动执行代码,非静态的不执行;先父类后子类,先静态后非静态;静态方法和非静态方法都是被动调用,即不调用就不执行

阅读更多

Java反序列化Commons-Collection篇02-CC6链

<1>环境分析

实际上 CC6链子 又是CC1的一个变种 没有版本限制
找到这个漏洞的人又开辟出 一个新的线路 通过 TiedMapEntry.hashcode() 去触发 CC1里的 LazyMap.get()

这里我们是继续沿用的CC1 的项目
jdk版本:jdk8u65
pom.xml内容:

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>

阅读更多

Java反序列化Commons-Collection篇01-CC1链

<1> 环境配置

因为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
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
阅读更多

Java基础篇-注解与反射

注解(Annotation)

注解Annotation 是 JDK5.0 引入的一种注释机制

Annotation的作用:

  • 不是程序本身,可以对程序作出解释
  • 可以被其他程序(比如:编译器等)读取

Annotation的作用:

  • 注解是以”@注释名”在代码中存在的,还可以添加一些参数值

Annotation在哪里使用?

  • 可以附加在package、class、method、field上,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问
阅读更多