一昧的学习别人挖出来的链子是没有用的,一定会是在新的一场比赛会给你ban掉的,唯独掌握了自己挖链子的能力才可以。
tabby&neo4j语法学习
环境配置
分别参考了如下:
Neo4j环境配置 · wh1t3p1g/tabby Wiki (github.com) 安装neo4j环境
省流版:git clone下来后用idea打开,然后gradle刷新一下再idea里运行即可,不用每次java -jar。
这玩意运行起来很吃电脑内存,所以建议用好点的电脑去跑。
neo4j语法
懒得硬看官方文档了,参考了这篇博客:
时间紧急,就直接上手结合tabby来进行类搜索与查找了。
tabby基本使用
不知道这个东西能不能带污点分析。
我这里做了一个测试,配置文件关键部分这么写的:
1 | cases/commons-collections-3.2.1.jar = |
所以结合jdk扫描了cc组件,但是具体哪个jdk我还不知道…(暂且留坑)
1 | CALL db.schema.visualization() |
查看数据库基本情况。
这是一张非常重要的图,展示了tabby为我们提取出的类型,一个是class,一个是method,同时他们之间有一些关系,其他都比较好说,重点是这个alias
关系举个例子,大概就是object的tostring,和某个类overwrite的tostring的方法之间的关系。
通过几个事例感受一下语法:
1 | match (source:Method) where source.NAME = "readObject" return source limit 10; |
说一下我的见解,上述语句就跟类似的select method as source from table where source.name="readObject" limit 10;
一样,具体的节点用括号包裹起来(name:type)
,name
是你给你查找的元素的命名,后面为元素类型,然后后面的where从句就和sql完全一样,根据你要查找的类型的一些约束写一些判断句,具体类型的参数我们可以通过点击元素右边的提示栏查看当前元素的属性值。
当然通过上面的部分我们只能查到一些节点,我们怎么才能找到一个通路呢?
1 | match path=(source:Method)-[:CALL]->(sink:Method) |
这个不太好用sql语言类比了,但是我们能够直观的感受出来()-[]->[]
这是一条通路,两边端到端,中间的边以上面为例,就是寻找CALL类型的调用链路,然后这个链路用path=
赋值,然后return path
1 | match (source:Method)-[:CALL|ALIAS*..3]->(sink:Method) |
如果这个链子不知道有多长,可以用*..3
这种方式大概限制一下链的最大长度。
tabby-path-finder
可能是那个污点分析的插件,要用java11的maven编译,之前一直嫌弃wsl的java11很不常用,现在伏笔了。
装完之后正常导入插件即可使用,可能就是一个爆搜+剪枝的插件,不知道污点分析做的如何。
先摆一会。
现有利用链覆盖
由于我只是扫了cc3.2.1的,就先把这部分弄了
发现了需要在后面加上limit 10否则会在tostring的那类alias的地方卡死,大概是neo4j底层的实现吧。