Gadget寻找之路-tabby

本文最后更新于:3 分钟前

最近正苦于学习codeql,但是发现其在分析比较大项目的时候效率之低下,并且有时候当我希望结合jdk代码分析的时候会显得很麻烦,并且这玩意前面讲过只会分析项目中的代码,依赖在mvn编译的时候都是直接从网上或本地maven库脱下来jar包直接用的,根本不存在编译过程,所以会显得很麻烦,,总之各种的小事情堆在一起会让他显得略微麻烦(当然codeql还是非常强大的绝对不能丢)

于是有了这篇文章,学一学另一个强大的工具Tabby

环境搭建

(截止至2025.1.16的tabby最新版v1.3.2-3

建议使用jdk17的环境来进行以下所有操作:

tabby配置

设置JAVA_HOME环境变量为jdk17的安装目录,然后添加进Path,再在Path下将%JAVA_HOME%\bin添加进去

打开命令行验证当前环境

在项目地址:https://github.com/wh1t3p1g/tabby的release下载下最新的tabby,如果出问题了可以pull一份源码自己本地用gradle编译一下(注意gradle使用的jdk环境也得是至少17)

一个编译打包好的tabby目录结构应该如下:

config目录下仅有一个文件settings.properties,是来修改相关运行参数,tabby>=1.1后,不再使用命令行的参数了,所有参数放在这个文件里

具体配置请在源码的doc目录下参考官方的说明

output(默认)下存放的是分析的输出结果,csv表格格式,重点其实就这两个目录

初次运行tabby会创建output目录,但是会报个错,但是看一眼原因也很明显了,找不到target,显然这时候我们还没指定待分析的数据源,先不管他

neo4j配置

首先不是特别建议下载neo4j desktop,

否则你将面对的是:

  • 初始化向被墙的neo4j站点发送签名验证,如果没走代理可能进程打开了但是没有界面弹出来
  • 即使走了代理也可能抽风403
  • 明明环境变量确实是17但是启动数据库仍然提示主类找不到
  • 数据库启动异常缓慢,明明成功启动了但是还是报错得再点一次

当然,以上除了第一二点,其他的可能存在个人因素,总之各有千秋

这里侧重使用社区版:

在官网:https://neo4j.com/deployment-center/#community

微云的站点:https://we-yun.com/doc/neo4j/

我就顺势划到最下面下了个5.9.0的(实际上当时最高版本都5.23了hhhhhh)

随便解压到一个地方,环境变量配不配看自己心情了,不配就每次去bin目录下执行一下

证书好像装不装没啥影响,我没装也没碰上啥问题

然后再bin目录下运行,出现Started也就算成功了,去浏览器访问http://localhost:7474/就能看到自己的neo4j界面辣!第一次登陆的时候账密都是neo4j,登陆后会让你改一下密码,改就完事了,记住这个密码!

还是回到doc,官方给了两个环境配置的文件,得结合着看

官方在这里说的很详细了,下载两个插件,以及对应版本不要搞错,否则会报错

在settings.properties里添加一个字段,是你本地的tabby(实际上高版本tabby在这里填没什么用,可填可不填,他不会自动上传数据库)

插件下载:

tabby-path-finder-1.1.jar

apoc-core.jar

apoc-extend.jar

在对应官网下载好后,丢到plugins目录下(那个neo4j-jwt-addons是我从桌面版薅过来的,没有问题也不大)

然后在conf\neo4j.conf下,修改一些配置

取消下面代码的注释

1
server.directories.import=import

允许apoc插件

1
dbms.security.procedures.unrestricted=jwt.security.*,apoc.*

下面几个内存分配字段自己看着改一改,和tabby文档有点不同的是这里是server.而不是tabby文档中的dbms.开头

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

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

至此neo4j该配置的也配置完了,重启一下看看效果

查询语句

CALL apoc.help(‘all’)

apoc插件启动正常

查询语句

CALL tabby.help(‘tabby’)

tabby-path-finder依赖启动正常

剩下的就参考doc中给出的,对数据库做一些前期工作了

扫描结果上传至neo4j数据库

前面提到过了,高版本的tabby是不会自动将结果上传到neo4j,所以这里需要用官方给出的另一款工具

tabby-vul-finder

我们先用maven仓库里的cc漏洞版本试一试,具体配置参数参考官方文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# need to modify
tabby.build.target = C:\\Users\\linfe\\.m2\\repository\\commons-collections\\commons-collections\\3.2.1\\commons-collections-3.2.1.jar
tabby.build.libraries = libs
tabby.build.mode = gadget
tabby.output.directory = ./output/dev

# debug
tabby.debug.details = false
tabby.debug.print.current.methods = true

# jdk settings
tabby.build.useSettingJRE = true #这里用手动设置的jdk不然他会自己去环境变量找jdk来分析
tabby.build.isJRE9Module = false #我们分析的是8u65所以是false
#tabby.build.javaHome = /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
tabby.build.javaHome = C:\\Users\\linfe\\.jdks\\jdk1.8.0_65 #然后指定一下jdk_home
tabby.build.isJDKProcess = true
tabby.build.withAllJDK = false #简单做个示范就不分析全量jdk了
tabby.build.isJDKOnly = false #还分析依赖呢哥们儿!

# dealing fatjar
tabby.build.checkFatJar = true

# pointed-to analysis
tabby.build.isFullCallGraphCreate = false
tabby.build.thread.timeout = 2
tabby.build.method.timeout = 5
tabby.build.isNeedToCreateIgnoreList = false
tabby.build.timeout.forceStop = false
tabby.build.isNeedToDealNewAddedMethod = true

tabby.neo4j.username = neo4j
tabby.neo4j.password = ******
tabby.neo4j.url = bolt://127.0.0.1:7687 #可有可无的三行,

然后运行,我想让他跑快点就多分配了些内存,Xms不是必须参数

1
java -jar -Xms4G tabby.jar

然后output目录下就出现了几个csv:

这时候我们打开tabby-vul-finder,根据官方给的参数load

like this

1
java -jar tabby-vul-finder.jar load D:\HACK\CTF\Web\tabby\output\dev

他每次都会清除上次上传的关系和数据

然后等一会之后提示Done就上传成功了

这时候我们打开neo4j的web页

参考官方给出的一些链子查询: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测试

好了,现在你已经会一点点的基本使用辣!句子怎么写,就靠自己了

至于idea插件啥的有兴趣的也可以拿来玩玩实际上就是方便了一点查找代码,但是时常面临代码找不到的问题