源码:https://github.com/zy7y/graphql-schema-parse
PYPI:https://pypi.org/project/graphql-schema-parse/
详细文档制作中...
已有功能:
GraphQL 服务器 IP:PORT 转 JSON
GraphQL 服务器 IP:PORT 转 GQL
GraphQL 服务器 IP:PORT 转 TEXT(此为 HTTP 请求源信息,可用于 sqlmap SQL 注入扫描)
GraphQL JSON(.json) 文件转 JSON
pip install graphql-schema-parse
# depth是个可选参数,作用与生成得query 语句部分中查询字段的查找层级
#.graphql -> gql
gql parse schema.graphql --to gql --depth 5 存放目录
gql parse http://127.0.0.1:8000 --to gql 测试目录
gql parse schema.json --to gql --depth 5 存放目录
gql parse [schema.json | schema.graphql ] --depth 5 存放目录
gql parse http://127.0.0.1:8000 测试目录
gql parse http://127.0.0.1:8000 --to sqlmap 测试目录
# 转之后生成的内容
## json(根据文档中对应类型填充对应的默认参数)
```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 requests
from requests import post
url = "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())
POST /graphql HTTP/1.1
HOST: http://127.0.0.1:8000
Authorization: Bearer token
Content-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"}
# 安装sqlmap
pip install sqlmap
# 进行SQL注入扫描, sqlmap详细用法前往sqlmap官网学习
sqlmap -r addUserInput.txt --level 5 --risk 3
开始扫描
扫描结果
mutation addUserInput($user: AddUserInput!) {
addUserInput(user: $user) {
id
username
}
}
gql --help
gql 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语句体中可用查询字段递归深度 :param
to_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.
需要生成 test_xx.py 可以直接继承 src 中的 MakeFile 类,实现其中的抽象方法
看了下,挺实用的工具。详细文档还是看 github 的吧,这里写的有点简略。