源码:https://github.com/zy7y/graphql-schema-parse
Gitee: https://gitee.com/zy7y/graphql-schema-parse
PYPI:https://pypi.org/project/graphql-schema-parse/
详细文档制作中... (可关注仓库动态)
已有功能:
GraphQL SDL(.graphql) 文件转 JSON
GraphQL SDL(.graphql) 文件转 GQL

GraphQL 服务器IP:PORT 转 JSON
GraphQL 服务器IP:PORT 转 GQL
GraphQL 服务器IP:PORT 转 TEXT(此为HTTP请求源信息,可用于sqlmap SQL注入扫描)

GraphQL JSON(.json) 文件转JSON
GraphQL JSON(.json) 文件转 GQL

安装
pip install graphql-schema-parse
使用
#.graphql -> gqlgql parse schema.graphql --to gql --depth 5 存放目录# ip:port -> gql (需要token认证才能访问接口文档时,请前往仓库查看)gql parse http://127.0.0.1:8000 --to gql 测试目录# .json -> gqlgql parse schema.json --to gql --depth 5 存放目录# .json .graphql -> gql [ 选择1 | 选择2 ] 两个里面选一个, (json文件内容会根据文档填充对应类型的默认参数,最终的json文件可直接给requests使用)gql parse [schema.json | schema.graphql ] --depth 5 存放目录# ip:port -> json (需要token认证才能访问接口文档时,请前往仓库查看)gql parse http://127.0.0.1:8000 测试目录# ip:port -> txt (用于sqlmap -r 指定的txt, http请求源信息文件)gql parse http://127.0.0.1:8000 --to sqlmap 测试目录
解析生成的内容
json(根据文档中对应类型填充对应的默认参数)
{"query": " mutation addUserInput ($user: AddUserInput!){\n addUserInput (user: $user){\n id\n username\n }\n \n }\n ","variables": {"user": {"username": "","password": ""}},"operationName": "addUserInput"}
使用requests进行请求
# pip install requestsfrom requests import posturl = "http://127.0.0.1:8000/graphql"data = {"query": " mutation addUserInput ($user: AddUserInput!){\n addUserInput (user: $user){\n id\n username\n }\n \n }\n ","variables": {"user": {"username": "", "password": ""}},"operationName": "addUserInput"}print(post(url, json=data).json())

txt(sqlmap -r 可用的sql注入扫描文件)
POST graphql HTTP/1.1HOST: http://127.0.0.1:8000Authorization: Bearer tokenContent-Type: application/json{"query": " mutation addUserInput ($user: AddUserInput!){\n addUserInput (user: $user){\n id\n username\n }\n \n }\n ", "variables": {"user": {"username": "*", "password": "*"}}, "operationName": "addUserInput"}
# 安装sqlmappip install sqlmap# 进行SQL注入扫描, sqlmap详细用法前往sqlmap官网学习sqlmap -r addUserInput.txt --level 5 --risk 3
开始扫描

扫描结果

gql(专门的graphql测试工具的query语句部分)
mutation addUserInput($user: AddUserInput!) {addUserInput(user: $user) {idusername}}
API
gql --helpgql parse --help
output:
Usage: gql parse [OPTIONS] FROM_PATH TO_DIRECTORY将Graphql接口文档转成gql文件/Json文件 :param from_path: 接口文档地址, 本地JSON文件地址(.json) 或者 本地SDL文件(.schema ), 或者 服务器URL填入(服务器的IP:PORT) :param to: 转换之后的文件类型, 可选to_json(.json) to_gql(.gql) / to_sqlmap(.txt) :param headers: from_type为url时可选项,请求头文件地址(.json) :param depth: query语句体中可用查询字段递归深度 :paramto_directory: 转换之后文件,保存目录 :return:Arguments:FROM_PATH 接口文档地址, 本地JSON文件地址(.json) 或者 本地 SDL文件(.schema ), 或者服务器URL填入(服务器的IP:PORT) [required]TO_DIRECTORY 生成文件保存目录,不存在时,自动创建 [required]Options:--headers TEXT url方式获取接口文档时,可选项传入请求头json文件地址--to [json|gql|sqlmap] [default: ToType.to_json]--depth INTEGER query语句体中可用查询字段递归深度 [default: 1]--help Show this message and exit.




