0x00 前言
反序列化总纲
cc链无非就是不同的调用拼接在一起形成的,比如cc5就是在cc1的基础上进行调用调整的。
0x01 BadAttributeValueExpException
在LazyMap的基础上,发现了一个新的调用方式,就是通过 TiedMapEntry+BadAttributeValueExpException的方式进行调用的。
在之前,我们知道LazyMap需要调用get方法才可以触发,那么我们的主题就是如果去触发LazyMap的get方法。
1.TiedMapEntry
首先来看这个类的构造方法。
可以看到存储了一个Map对象
然后找此类中调用map.get的地方
然后继续找getValue的地方,可以看到三个方法equals,hashcode,toString
那么也就是说只要找到一个类的readObject中可以触发这四个方法就可以续上我们的LazyMap。
2.BadAttributeValueExpException
来看这个类的readObject方法,可以看到toString的方法
要想执行到toString方法,那么val就不能为空,所以我们需要对val进行一个赋值。
poc:
Field valfield = val.getClass().getDeclaredField("val");
Reflections.setAccessible(valfield);
valfield.set(val, entry);
当val有值了之后就会触发toString方法,就会走到TiedMapEntry,然后调用LazyMap的get方法,然后走迭代链或者其迭代链。
0x03 使用条件
- 除最新版本无限制
0x04 要点笔记
- 通过TiedMapEntry包裹LazyMap
- 通过BadAttributeValueExpException调用toString方法
补充知识
Commons Collections
Apache Commons Collections 是一个为 Java 提供扩展集合类的开源项目。它提供了一系列有用的集合类和算法,可以使编程变得更加简单,快捷和高效。该项目的目标是提供一系列可重用的集合类和算法,以便更好地支持 Java 语言的开发。这些集合类和算法采用了可扩展的方式,方便对其进行定制和扩展。一些常用的集合类包括:List, Set, Map, Stack, Queue 等。Commons Collections 还提供了一些实用的算法,例如排序,查找,迭代等。该项目还提供了一些工具类,用于操作集合和其它数据结构。该项目的目标是成为一个高质量,高性能,易于使用的集合类库。
Commons Collections优势
Commons Collections 是一个 Java 库,它提供了许多常用的数据结构和算法实现,使 Java 开发人员能够更轻松地处理集合和映射等数据结构。以下是 Commons Collections 的优势:
-
丰富的数据结构:Commons Collections 支持多种数据结构,包括列表、双向列表、集、双端队列、堆、栈、树、位集等,这些实现了大部分开发人员所需的数据结构。
-
操作灵活方便:Commons Collections 提供了丰富的操作方法,如排序、查找、遍历、过滤、转换、合并等,这些方法可以方便地处理数据结构。
-
支持自定义:Commons Collections 通过接口或抽象类提供了多样的接口,以便用户可以自定义数据结构的实现。
-
可扩展性强:Commons Collections 可以与其他开源库和框架进行集成,如 Guava、Spring Framework、Hibernate 等。
-
文档详尽:Commons Collections 提供了详尽的文档和示例,开发人员可以很容易地学习和使用该库。
-
开发活跃:Apache Commons 是 Apache 组织下的一个开源项目,其开发和维护都非常活跃。作为 Commons Collections 的一部分,其代码质量和稳定性得到了保证。
序列化和反序列化
Java 序列化是将 Java 对象转换为字节流的过程,以便在网络上传输或者将对象保存到磁盘文件中。Java 反序列化则是将字节流反转回 Java 对象的过程,以便在程序中使用这些对象。
Java 序列化和反序列化的过程使用 ObjectOutputStream
和 ObjectInputStream
这两个类来实现。序列化过程中,将需要序列化的对象写入 ObjectOutputStream
中,并通过网络或文件等途径传输或保存,反序列化过程中则将字节流读入 ObjectInputStream
中,并通过类型转换得到原始对象。
需要注意的是,在进行序列化和反序列化时,对象所对应的类需要实现 Java 序列化接口 Serializable
,否则会抛出序列化异常。同时,在进行序列化时,对于敏感信息,需要进行加密或者采用其他安全措施。
序列化栗子
下面是一个简单的 Java 序列化例子:
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// 创建一个对象
Person person = new Person("Alice", 25);
// 将对象序列化到文件
try {
FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(person);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in person.ser");
} catch (IOException e) {
e.printStackTrace();
}
// 从文件读取序列化的对象
try {
FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Person deserializedPerson = (Person) in.readObject();
in.close();
fileIn.close();
System.out.println("Deserialized data:");
System.out.println("Name: " + deserializedPerson.getName());
System.out.println("Age: " + deserializedPerson.getAge());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
// 可序列化的类
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
运行程序后,会在当前目录下创建一个名为 person.ser
的文件,里面保存着序列化后的对象。然后程序从文件中读取序列化的对象,将其反序列化成一个 Person
对象,最后输出这个对象的属性。
Java代码审计学习方法
以下是Java代码审计学习方法的一些建议:
-
了解Java编程基础:在开始进行Java代码审计之前,需要掌握Java编程的基础知识,了解Java的语法,数据类型,控制流程等基本概念。
-
学习安全知识:了解常见的Web攻击类型,例如SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。
-
学习常见漏洞:学习已知的安全漏洞,理解攻击者利用这些漏洞的方法,例如未经验证的输入、代码注入和文件包含漏洞等。
-
寻找样例代码:一些开源的应用程序或框架可以用来学习Java代码审计,例如WordPress、Joomla和Struts等。通过分析这些代码,可以了解常见的安全问题和漏洞。
-
学习使用辅助工具:使用一些代码审计工具,例如FindBugs、SonarQube和Parasoft等,可以帮助发现代码中的错误和漏洞。
-
实践漏洞挖掘:通过实践,寻找一些样例代码中的漏洞,例如通过手动构造攻击向量,测试应用程序的安全性。
-
学习修复漏洞:理解漏洞修复的方法,例如安装补丁、更新库或修复代码中的错误。学习如何编写安全的代码,通过遵循安全编码实践来避免漏洞的产生。文章来源:https://www.toymoban.com/news/detail-415464.html
Java代码审计需要对Java编程基础、Web安全、常见漏洞和修复方法等知识有充分的了解。通过实践和使用工具,可以提高对代码中漏洞的发现和修复能力。文章来源地址https://www.toymoban.com/news/detail-415464.html
到了这里,关于Java代码审计——Commons Collections5 BadAttributeValueExpException的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!