工具tabby的学习之路
工具tabby的学习之路
Sherlock前言
原本没想着这么早就开学tabby,但由于学长发了个java题目来锻炼锻炼我的能力,一开压缩包我了个豆40MB,自己审计不知道要审到猴年马月,做ctf讲究一个效率,所以毅然决然来开tabby
(没想到开了三天才结束。。。)
环境搭建
tabby配置
(截至到2025.3.24,tabby最新版本为v2.0.0)
tabby需要的java版本为17,所以请先把自己电脑里面系统环境变量中的java版本改为17
一个编译打包好的tabby目录结构应该如下:
1 | $ tree |
我们下载下来的tabby的config目录下面只有一个settins.properties文件,这是正常的,不用担心
还要更具体的信息可参考官方文档
第一次运行的话会创建一个output目录,并且还会报错,这很正常,看报错是说target没有找到目标,这是对的嘛,毕竟我们都还没指定要分析什么目标
Neo4j配置
注意:由于 tabby-path-finder 需要使用 Neo4j 5.x 版本,推荐默认采用 5.x 版本
首先不是特别建议下载neo4j desktop,
否则你将面对的是:
- 初始化向被墙的neo4j站点发送签名验证,如果没走代理可能进程打开了但是没有界面弹出来
- 即使走了代理也可能抽风403
- 明明环境变量确实是17但是启动数据库仍然提示主类找不到
- 数据库启动异常缓慢,明明成功启动了但是还是报错得再点一次
当然,以上除了第一二点,其他的可能存在个人因素,总之各有千秋
这里侧重使用社区版:
在官网:https://neo4j.com/deployment-center/#community
或
微云的站点:https://we-yun.com/doc/neo4j/
在微云里面我下的是5.26.4
下载完后就随便扔在一个地方就行了,环境变量想配的话也可以,不想配的话就每次到bin目录下面执行相关命令就可以了
(证书似乎也可以不装,没影响)
相关的指令
console: 直接启动 neo4j 服务器
install-service | uninstall-service | update-service : 安装/卸载/更新 neo4j 服务
start/stop/restart/status: 启动/停止/重启/状态
-V 输出更多信息
进入到bin目录,执行
1 | neo4j console |
在浏览器中访问http://localhost:7474
使用用户名neo4j和默认密码neo4j进行连接,然后会提示更改密码(要记住更改完后的密码)
接着我们回到tabby的官方文档去看看关于Neo4j的相关配置
文档中让我们下载两个插件,并且对应的版本不能弄错
插件下载完后丢到plugins目录下面就好了
在settings.properties里添加一个字段,是你本地的tabby(实际上高版本tabby在这里填没什么用,可填可不填,他不会自动上传数据库)
在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 | apoc.import.file.enabled=true |
至此neo4j该配置的也配置完了,重启一下看看效果
查询语句
1 | CALL apoc.help('all') |
apoc插件启动正常
查询语句
1 | CALL tabby.help('tabby') |
tabby-path-finder依赖启动正常
剩下的就参考官方文档中给出的,对数据库做一些前期工作了
扫描结果上传至neo4j数据库
(由于后续的过程我自己配并进行测试的时候出了挺多问题,所以版本改来改去的,现在我用的tabby版本为1.3.2-2,用的neo4j版本为5.9.0)
前面提到过了,高版本的tabby是不会自动将结果上传到neo4j,所以这里需要用官方给出的另一款工具
笔者的教训是直接将其克隆下来而不是下它的realese,因为它的分发版里面少了听过东西,用的时候数据上传不全
该工具的配置文件db.properties要按自己的neo4j配置来进行改动
接着我们开始测试,这次测的是maven库里面自带的cc漏洞版本
setting.properties内容如下:
1 | # need to modify |
启动tabby(命令中的xmx参数不是必需,看自己要求)
1 | java -Xmx8G -jar tabby.jar |
成功运行的话会返回done bye
然后我们去看ouput/dev目录下面会生成几个csv文件
接下来利用tabby-vul-finder工具将csv数据上传到neo4j上
1 | java -jar tabby-vul-finder.jar load E:\safety\tools\tabby\output\dev |
成功查出!!!
历尽三天的折磨,笔者终于是成功用上了
简单改一下官方给出的找setter->jndi的查询语句
1 | match path=(m1:Method)-[:CALL*..5]->(m2:Method {IS_SINK:true}) where m1.NAME =~ "get.*" and not m1.HAS_PARAMETERS return path |