
GraphQL 서버 엔진 핑거프린팅 도구로, 정상적이고 변형된 쿼리를 전송하여 백엔드 기술을 식별하고 GraphQL 위협 매트릭스를 통해 보안 방어를 평가합니다.
graphw00f(wafw00f에서 영감을 받음)는 GQL 엔드포인트를 위한 GraphQL 핑거프린팅 도구입니다. 정상적인 쿼리와 변형된 쿼리를 혼합하여 전송함으로써 백그라운드에서 실행 중인 GraphQL 엔진을 식별합니다. graphw00f는 GraphQL 위협 매트릭스 프로젝트를 활용하여 각 기술이 기본적으로 제공하는 보안 방어 기능과 해당 방어 기능이 기본적으로 활성화되어 있는지 여부에 대한 인사이트를 제공합니다.
특별히 제작된 쿼리는 각기 다른 GraphQL 서버 구현체가 쿼리, 뮤테이션, 서브스크립션에 대해 고유한 방식으로 응답하게 만듭니다. 이를 통해 백엔드 엔진을 손쉽게 핑거프린팅하고 다양한 GraphQL 구현체를 구별할 수 있습니다. (CWE: CWE-200)
graphw00f는 GET 또는 POST 기반 쿼리를 사용하는 GraphQL 서버를 탐지하고 핑거프린팅하는 것을 지원합니다.
graphw00f는 현재 다음 GraphQL 엔진을 발견하려고 시도합니다:
graphw00f 프로젝트는 GraphQL 위협 매트릭스 프로젝트를 기술 보안 매트릭스 데이터베이스로 사용합니다. graphw00f가 GraphQL 엔드포인트를 성공적으로 핑거프린팅하면 위협 매트릭스 문서를 출력합니다. 이 문서는 보안 엔지니어가 해당 기술의 성숙도, 제공하는 보안 기능, 그리고 CVE를 포함하는지 여부를 식별하는 데 도움을 줍니다.

git clone https://github.com/dolevf/graphw00f.git
사용법: main.py -d -f -t http://example.com
옵션:
-h, --help 이 도움말 메시지를 표시하고 종료합니다
-r, --noredirect 3xx 응답에 의해 주어진 리디렉션을 따르지 않습니다
-t URL, --target=URL 경로를 포함한 대상 URL
-f, --fingerprint 핑거프린트 모드
-d, --detect 탐지 모드
-p PROXY, --proxy=PROXY
HTTP(S) 프록시 URL 형식:
http://user:pass@host:port
-T TIMEOUT, --timeout=TIMEOUT
요청 시간 초과(초)
-o OUTPUT_FILE, --output-file=OUTPUT_FILE
결과를 파일(CSV)로 출력
-l, --list graphw00f가 탐지 가능한 모든 GraphQL 기술 목록 표시
-u USERAGENT, --user-agent=USERAGENT
사용할 사용자 정의 User-Agent(헤더 설정의 값을 덮어씁니다)
-H HEADER, --header=HEADER
보낼 사용자 정의 헤더 (예: "Authorization: Bearer ey...").
-w WORDLIST, --wordlist=WORDLIST
사용자 정의 GraphQL 엔드포인트 목록 파일 경로
-v, --version 현재 버전을 출력하고 종료합니다
graphw00f에 필요한 설정은 많지 않습니다. 하지만 특정 엔드포인트에 대해 Authorization 헤더나 쿠키 설정이 필요하다면 conf.py 파일을 사용하세요.
# 사용자 정의 헤더
HEADERS = {'User-Agent':'graphw00f'}
# 사용자 정의 쿠키
COOKIES = {"PHPSESS":"DEADBEEF"}
--user-agent를 사용하면 conf.py 파일에 User-Agent가 있든 없든 관계없이 User-Agent 키가 추가됩니다. 파일에 이미 User-Agent가 있는 경우 명령줄 매개변수가 이를 덮어씁니다.
다음은 GraphQL 위치를 사전에 알고 있는 엔드포인트(/graphql)를 핑거프린팅(-f)하는 예제입니다.
python3 main.py -f -t https://demo.hypergraphql.org:8484/graphql
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.0.7
GraphQL을 위한 핑거프린팅 도구
Dolev Farhi <[email protected]>
[*] https://demo.hypergraphql.org:8484/graphql 에서 GraphQL 사용 가능 여부 확인 중...
[*] GraphQL 발견됨...
[*] 핑거프린팅 시도 중...
[*] 발견된 GraphQL 엔진: (HyperGraphQL)
[!] 공격 표면 매트릭스: https://github.com/dolevf/graphw00f/blob/main/docs/hypergraphql.md
[!] 기술: Java
[!] 홈페이지: https://www.hypergraphql.org
[*] 완료.
다음은 graphw00f가 GraphQL이 위치한 곳을 탐지(-d)한 후 핑거프린팅 프로세스를 실행(-f)하는 예제입니다.
python3 main.py -f -d -t http://localhost:5000
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.1.2
GraphQL을 위한 핑거프린팅 도구
Dolev Farhi <[email protected]>
[*] http://dvga.example.local:5000/graphql 확인 중
[!] http://dvga.example.local:5000/graphql 에서 GraphQL 발견됨
[*] 핑거프린팅 시도 중...
[*] 발견된 GraphQL 엔진: (Graphene)
[!] 공격 표면 매트릭스: https://github.com/nicholasaleks/graphql-threat-matrix/blob/master/implementations/graphene.md
[!] 기술: Python
[!] 홈페이지: https://graphene-python.org
[*] 완료.
graphw00f에 오탐, 부정확한 탐지, 버그 등 문제가 있는 경우 환경 세부 정보와 함께 GitHub 이슈를 생성해 주세요.
GraphQL에 대해 더 배우고 싶으신가요? 제 다른 프로젝트인 Damn Vulnerable GraphQL Application에서 GraphQL을 해킹해 보세요!