Java反序列化工具利用篇01-tabby

0x00 前言

tabby工具还是挺棒的,就是配置太麻烦,我也是在他人的帮助下完成,所以很有必要记一下。

0x01 tabby配置

配置Java环境

建议Java的环境变量设置成jdk17:

image-20250327221343474

验证:

image-20250327221706931

下载tabby项目

本人使用:Release v1.3.2-3 · wh1t3p1g/tabby,选择tabby.zip即可。

不难看到项目里有个tabby.jar,直接运行如下命令,会生成output目录:

1
java -jar tabby.jar

image-20250327222230027

0x02 neo4j配置

neo4j搭建

Neo4j是什么,为什么需要Neo4j,Neo4j的优势和应用场景-CSDN博客

本人使用neo4j-5.9.0,可以在微云这边下:https://we-yun.com/doc/neo4j/

我配置了neo4j的环境变量,可以直接启动:

1
neo4j console

如果不配置,就需要在bin目录下使用命令。

image-20250327222806978

启动完毕,初始账户和密码都是neo4j,会要求修改密码,然后进入:

image-20250327222847741

tabby相关配置

在tabby项目config目录下的settings.properties文件添加:(密码是刚才修改的)

image-20250327223233417

neo4j插件下载

三个插件:

  • tabby-path-finder-1.1.jar
  • apoc-core.jar
  • apoc-extend.jar
插件 下载地址 注意事项
tabby-path-finder-1.1.jar https://github.com/wh1t3p1g/tabby-path-finder
apoc-core.jar https://github.com/neo4j/apoc apoc 插件版本与项目版本对应
apoc-extend.jar https://github.com/neo4j-contrib/neo4j-apoc-procedures apoc 插件版本与项目版本对应

下载完都得放到neo4j项目的plugins目录下:

image-20250327223411662

neo4j配置文件修改

对neo4j项目conf目录下的neo4j.conf文件进行修改:

  • 取消下面代码的注释
1
server.directories.import=import
  • 允许apoc插件
1
dbms.security.procedures.unrestricted=jwt.security.*,apoc.*

在conf目录下创建一个新文件apoc.conf,内容

1
2
apoc.import.file.enabled=true
apoc.import.file.use_neo4j_config=false

验证neo4j插件

重新启动neo4j:neo4j console

验证插件是否正常启动:CALL apoc.help('all')

image-20250327224321865

相同的,验证tabby-path-finder依赖是否正常启动:CALL tabby.help(‘tabby’)

image-20250327224440254

在上面输入命令的地方,输入下面命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE CONSTRAINT c1 IF NOT EXISTS FOR (c:Class) REQUIRE c.ID IS UNIQUE;
CREATE CONSTRAINT c2 IF NOT EXISTS FOR (c:Class) REQUIRE c.NAME IS UNIQUE;
CREATE CONSTRAINT c3 IF NOT EXISTS FOR (m:Method) REQUIRE m.ID IS UNIQUE;
CREATE CONSTRAINT c4 IF NOT EXISTS FOR (m:Method) REQUIRE m.SIGNATURE IS UNIQUE;
CREATE INDEX index1 IF NOT EXISTS FOR (m:Method) ON (m.NAME);
CREATE INDEX index2 IF NOT EXISTS FOR (m:Method) ON (m.CLASSNAME);
CREATE INDEX index3 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.CLASSNAME);
CREATE INDEX index4 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.NAME0);
CREATE INDEX index5 IF NOT EXISTS FOR (m:Method) ON (m.SIGNATURE);
CREATE INDEX index6 IF NOT EXISTS FOR (m:Method) ON (m.NAME0);
CREATE INDEX index7 IF NOT EXISTS FOR (m:Method) ON (m.NAME0, m.CLASSNAME);
:schema //查看表库
:sysinfo //查看数据库信息

0x03 tabby-vul-finder

工具下载

tabby把Java反序列化链子变成知识图谱形式且放在neo4j存储和展示。但是1.3h后的tabby不支持系统上传,需要我们自己配置,这就需要用到工具;tabby-vul-finder

image-20250327225157236

选择第二个吧,第一个不好使,本人是用学长的。

tabby再次配置

再次配置tabby项目的settings.properties,这次是完整的。请一行一行对照,有些需要相应的修改:

image-20250327225446480

这里我是放入了common-collections的3.2.1的jar包,执行如下命令会让tabby分析该jar包存在的Java反序列化链子:

1
java -jar -Xms4G tabby.jar

在tabby项目的output\dev目录下出现这些文件:

image-20250327225802889

这些都是存在的漏洞数据,我们需要把这些数据上传到neo4j上面,这就是我们下载tabby-vul-finder工具的原因。

执行如下命令,路径是上图的路径:

1
java -jar tabby-vul-finder.jar load Path\tabby\output\dev

tabby-vul-finder配置

配置tabby-vul-finder项目的config目录下的db.properties文件:

image-20250327230223113

然后在tabby-vul-finder项目先执行如下命令生成tabby-vul-finder.jar:(mvn命令请自行配置)

1
mvn clean package -DskipTests

在该项目的target目录下生成两个jar包:

image-20250327230510022

把tabby-vul-finder.jar包放到根目录,执行如下命令:

1
java -jar tabby-vul-finder.jar load Path\tabby\output\dev

该命令会把tabby项目对应目录下的csv文件上传到neo4j(要先启动neo4j的web端,也就是运行neo4j console)。

上传的大小大概是:

image-20250327230742025

如果是是(一百多,一百八十多),就该考虑是不是没有上传成功,当然下面的方法也可以验证。

0x04 neo4j验证

上文已经上传csv数据了,但是不知道有没有上传成功。

从下面给出的链子选一条指令放到neo4j的命令行执行一下:

https://github.com/wh1t3p1g/tabby/wiki/%E7%8E%B0%E6%9C%89%E5%88%A9%E7%94%A8%E9%93%BE%E8%A6%86%E7%9B%96

我选择cc2:

image-20250327231049062

显然是存在的,那么就上传成功了。如果不存在,就是上传失败,很可能是tabby-vul-finder工具不行,找人要一下吧(我真的不想搞云盘)。