IDEA 是 Java 的集成开发环境,也是调试分析 Java 相关漏洞的神器,这篇文章将会介绍如何使用 IDEA 对 Java 反序列化漏洞进行分析,并以 Fastjson 反序列化漏洞的调试分析作为实战例子。
本次实验需要具备 Java 语言的基础,特别是反射方面的知识。
环境搭建
进行调试前,需要安装必要的环境
- JDK8
- IDEA
在下面的地址下载 JDK 8
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

在这里下载 IDEA 社区版本
https://www.jetbrains.com/idea/download/

下载好后直接安装jdk8 和 IDEA ,使用默认选项即可。
安装好 IDEA 后,打开IDEA ,点击 New Project

在新窗口中选择 Gradle 项目,Project SDK 处选择我们安装的 jdk 8,然后勾选 Java ,点击 Next 进入下一步。

输入项目名称,点击 Finish

耐心等待项目初始化完,也就是等待下面的进度条消失

初始化完后的页面如下,在左边的窗口出现了如下目录,其中 src 目录是存放源码的目录。

接下来创建一个类进行调试


输入 hello world 代码
public class Main {
public static void main(String[] args) {
System.out.printf("Hello World!");
}
}
点击代码左边的绿色小箭头来运行代码

可以看到成功输出了 Hello World!

接下来开始配置实验环境,先通过配置项目构建工具 gradle 来加载存在漏洞的 fastjson 库,打开 build.gradle 文件,修改与以下内容,第14行处导入存在漏洞的 fastjson 库,版本号为 1.2.24, 然后点击右上角的 gradle 同步按钮,这样 gradle 就会自动下载该版本的 fastjson 作为库来使用。
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.alibaba:fastjson:1.2.24'
}

fastjson 用法
在进行漏洞调试前,我们先来看看 fastjson 的用法。fastjson 是一个阿里开发的一个操作 json 数据的库。
先创建一个 Person 类来演示 fastjson 的使用,该类是一个典型的 java bean , 实现了 setter 和 getter 方法(setter 和 getter 方法一般用于给对象的变量赋值,如 setAge 方法给 age 变量赋值),同时实现了 toString() 方法,便于打印实例对象。
public class Person {
private int age;
private String name;
public int getAge() {
System.out.println("call getAge function ");
return age;
}
public void setAge(int age) {
System.out.println("call setAge function ");
this.age = age;
}
public void setName(String name) {
System.out.println("call setName function ");
this.name = name;
}
public String getName() {
System.out.println("call getName function ");
return name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
在 Main 类中添加以下代码,第5-7 行处创建了 person 对象,年龄为18, 姓名为 Jenny。第 9 行处使用 JSONObject.toJSONString() 方法把 person 对象转化为 json 字符串。
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setAge(18);
person.

最低0.47元/天 解锁文章
3926

被折叠的 条评论
为什么被折叠?



