唯一一款**依赖感知**的 GraphQL API 测试工具!
GraphQLer 是一款前沿工具,专为动态测试 GraphQL API 而设计,注重适应性。它提供一系列高级功能,可简化测试流程并确保对 GraphQL API 进行可靠分析。GraphQLer 能高效管理已创建的对象和资源,有效识别对象、查询和变更之间的依赖关系,并根据 API 的限制动态纠正查询中的错误。GraphQLer 已被用于在生产级 GraphQL API 中发现大量漏洞!

要开始使用 GraphQLer,请查看安装指南。
❯ python3 main.py --help
usage: main.py [-h] [--compile] [--fuzz] [--run] --path PATH [--auth AUTH] --url URL
options:
-h, --help show this help message and exit
--compile runs on compile mode
--fuzz runs on fuzzing mode
--run run both the compiler and fuzzer (equivalent of running --compile then running --fuzz)
--path PATH directory location for saved files and files to be used from
--auth AUTH authentication token Example: 'Bearer arandompat-abcdefgh'
--url URL remote host URL
以下步骤说明如何使用该程序测试你的 GraphQL API。使用过程分为两个阶段:编译和模糊测试。
此外还有第三种模式,称为运行模式,它把编译和模糊测试合并为一个命令。
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
编译完成后,你可以在 <SAVE_PATH>/compiled 中查看编译结果。此外,还会生成一张名为 dependency_graph.png 的图表供检查。编译后的 .yaml 文件中的任何 UNKNOWNS 均可手动标记;但即使不标记,模糊测试器仍会运行它们,只是不使用依赖链。
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
模糊测试期间,控制台会记录与 GraphQL API 相关的统计数据以及正在进行的请求计数。所有请求返回码都会写入 <SAVE_PATH>/stats.txt。模糊测试期间的所有日志都保存在 <SAVE_PATH>/logs/fuzzer.log 中。日志文件会准确告诉你哪些请求发送到了哪些端点,以及响应是什么。这些信息可用于进一步的结果分析。
同时运行编译模式和模糊测试模式。
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
你还可以修改 constants.py 文件中的一些变量。它们对应 GraphQLer 中实现的特定功能,你可以根据需求进行调整。
| 变量名 | 变量描述 | 变量类型 | 默认值 |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | 对象与对象 ID 之间的莱文斯坦距离 | 整数 | 20 |
| MAX_OBJECT_CYCLES | 同一对象在同一次查询/变更中可被实例化的最大次数 | 整数 | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | 查询/变更输出可扩展的最大深度(例如无限递归选择器的情况) | 整数 | 3 |
| USE_OBJECTS_BUCKET | 是否存储对象 ID 以供将来使用 | 布尔值 | True |
| USE_DEPENDENCY_GRAPH | 是否使用依赖感知功能 | 布尔值 | True |
| MAX_FUZZING_ITERATIONS | 在每个节点上运行的最大模糊测试载荷数量 | 整数 | 5 |
| MAX_TIME | 最大运行时间 | 整数 | 3600 |