
자동화된 GraphQL 스키마 열거 및 데이터 추출 도구로, 인트로스펙션 문서를 반복 조회하고 쿼리를 재구성하며 응답을 저장하여 침투 테스트 및 API 보안 평가에 사용됩니다.
Graphicator는 GraphQL "스크래퍼"/추출기입니다. 이 도구는 대상 GraphQL 엔드포인트에서 반환된 인트로스펙션 문서를 반복 처리한 다음, 스키마를 내부 형식으로 재구성하여 지원되는 쿼리를 재생성할 수 있도록 합니다. 이러한 쿼리가 생성되면 이를 사용하여 엔드포인트에 요청을 보내고 반환된 응답을 파일에 저장합니다.
오류 응답은 저장되지 않습니다. 기본적으로 이 도구는 올바른 응답을 캐시하고 오류도 캐시하므로, 도구를 다시 실행할 때 동일한 쿼리를 다시 실행하지 않습니다.
현명하게 사용하고, 상호작용할 권한이 있는 대상에만 사용하십시오.
이 도구가 침투 테스터로서의 테스트를 자동화하고, 아직 GraphQL 테스트를 해보지 않은 사람들에게도 동기를 부여하기를 바랍니다.
GraphQL 엔드포인트에 대한 평가를 수행하는 방법을 알아보려면: https://cybervelia.com/?p=736&preview=true
python3 -m pip install -r requirements.txt
docker run --rm -it -p8005:80 cybervelia/graphicator --target http://the-target:port/graphql --verbose
작업이 완료되면 결과를 압축하여 zip 파일로 제공하며, 이 zip 파일은 포트 8005에서 제공되는 웹서버를 통해 제공됩니다. 컨테이너를 중지하려면 CTRL+C를 누르십시오. 컨테이너가 중지되면 데이터도 삭제됩니다. 또한 필요에 따라 호스트 포트를 변경할 수 있습니다.
python3 graphicator.py [args...]
첫 번째 단계는 대상을 구성하는 것입니다. 이를 위해 --target 옵션이나 --file을 사용한 파일을 제공해야 합니다.
인수를 통해 단일 대상 설정
python3 graphicator.py --target https://subdomain.domain:port/graphql
여러 대상 설정
python3 graphicator.py --target https://subdomain.domain:port/graphql --target https://target2.tld/graphql
파일을 통해 대상 설정
python3 graphicator.py --file file.txt
파일에는 한 줄에 하나의 URL이 포함되어야 합니다:
http://target1.tld/graphql
http://sub.target2.tld/graphql
http://subxyz.target3.tld:8080/graphql
도구를 모든 프록시에 연결할 수 있습니다.
기본 Burp 설정(포트 8080)에 연결
python3 graphicator.py --target target --default-burp-proxy
자체 프록시에 연결
python3 graphicator.py --target target --use-proxy
Tor를 통해 연결
python3 graphicator.py --target target --use-tor
python3 graphicator.py --target target --header "x-api-key:60b725f10c9c85c70d97880dfe8191b3"
python3 graphicator.py --target target --verbose
python3 graphicator.py --target target --multi
python3 graphicator.py --target target --insecure
python3 graphicator.py --target target --no-cache
python3 graphicator.py --target http://localhost:8000/graphql --verbose --multi
_____ __ _ __
/ ___/____ ___ _ ___ / / (_)____ ___ _ / /_ ___ ____
/ (_ // __// _ `// _ \ / _ \ / // __// _ `// __// _ \ / __/
\___//_/ \_,_// .__//_//_//_/ \__/ \_,_/ \__/ \___//_/
/_/
By @fand0mas
[-] Targets: 1
[-] Headers: 'Content-Type', 'User-Agent'
[-] Verbose
[-] Using cache: True
************************************************************
0%| | 0/1 [00:00<?, ?it/s][*] Enumerating... http://localhost:8000/graphql
[*] Retrieving... => query {getArticles { id,title,views } }
[*] Retrieving... => query {getUsers { id,username,email,password,level } }
100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 35.78it/s]
$ cat reqcache/9652f1e7c02639d8f78d1c5263093072fb4fd06c.json
{
"data": {
"getUsers": [
{
"id": 1,
"username": "theo",
"email": "[email protected]",
"password": "1234",
"level": 1
},
{
"id": 2,
"username": "john",
"email": "[email protected]",
"password": "5678",
"level": 1
}
]
}
}
$ cat reqcache-queries/9652f1e7c02639d8f78d1c5263093072fb4fd06c.query
query {getUsers { id,username,email,password,level } }
세 개의 폴더가 생성됩니다:
파일 이름은 쿼리와 URL을 고려한 해시입니다.
Copyright 2023 Cybervelia Ltd
이에 따라 본 소프트웨어와 관련 문서 파일(이하 "소프트웨어")의 사본을 획득한 모든 사람에게, 제한 없이 소프트웨어를 사용, 복사, 수정, 병합, 게시, 배포, 서브라이선스 및/또는 판매할 수 있는 권리(소프트웨어를 제공받은 사람에게 동일한 권리를 부여하는 조건 포함)를 무료로 허가합니다. 단, 다음 조건을 준수해야 합니다:
위 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 중요한 부분에 포함되어야 합니다.
본 소프트웨어는 "있는 그대로" 제공되며, 상품성, 특정 목적에의 적합성 및 비침해성에 대한 보증을 포함하여 어떠한 명시적 또는 묵시적 보증도 하지 않습니다. 어떠한 경우에도 저작자나 저작권 소유자는 계약, 불법 행위 또는 기타 행위로 인해 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않으며, 이는 소프트웨어 또는 그 사용이나 기타 거래로 인해 발생하는 경우에도 마찬가지입니다.
이 도구는 (@fand0mas)에 의해 생성 및 유지관리되고 있습니다.
기여도 환영합니다.