Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/ticarpi/jwt_tool
Vulnerability ScannersWeb SecurityFuzzingCryptographyCTFPenetration Testing
GitHubticarpi/jwt_tool

jwt_tool

🐍 JSON Web Tokens를 테스트, 조정 및 크래킹하기 위한 툴킷

저장소 보기
6.7k8121년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

JSON Web Token 툴킷 v2

jwt_tool.py는 JWT(JSON Web Token)를 검증, 위조, 스캔 및 변조하기 위한 툴킷입니다.

jwt_tool version python version

logo

기능은 다음과 같습니다:

  • 토큰의 유효성 검사
  • 알려진 익스플로잇 테스트:
    • (CVE-2015-2951) alg=none 서명 우회 취약점
    • (CVE-2016-10555) RS/HS256 공개 키 불일치 취약점
    • (CVE-2018-0114) 키 주입 취약점
    • (CVE-2019-20933/CVE-2020-28637) 빈 암호 취약점
    • (CVE-2020-28042) 널 서명 취약점
    • (CVE-2022-21449) Psychic Signature ECDSA 취약점
  • 잘못된 구성 또는 알려진 약점 스캔
  • 예상치 못한 동작을 유발하기 위한 클레임 값 퍼징
  • 비밀/키 파일, 공개 키, JWKS 키의 유효성 테스트
  • 고속 사전 공격을 통한 약한 키 식별
  • 키를 사용하거나 다른 공격 방법을 통해 새 토큰 헤더 및 페이로드 내용을 위조하고 새 서명 생성
  • 타임스탬프 변조
  • RSA 및 ECDSA 키 생성 및 (JWKS 파일로부터) 재구성
  • 모든 공격에 대한 속도 제한
  • ...그 외에도 많습니다!

대상 사용자

이 도구는 사용 중인 토큰의 강도와 알려진 공격에 대한 취약성을 확인해야 하는 모의 침투 테스터를 위해 작성되었습니다. 일부 JWT 라이브러리에 존재하는 잠재적 취약점을 더 깊이 조사하는 데 도움이 되도록 다양한 변조, 서명 및 검증 옵션이 제공됩니다.
또한 현재 CTF에서 JWT를 적극적으로 활용하는 것 같아 CTF 참가자에게도 유용하게 사용됩니다.
프로젝트에서 JWT를 사용하지만 위조된 토큰 사용 시 안정성과 알려진 취약점을 테스트하려는 개발자에게도 유용할 수 있습니다.


요구 사항

이 도구는 공통 라이브러리를 사용하여 기본적으로 Python 3(버전 3.6+)으로 작성되었지만, 다양한 암호화 기능(및 전반적인 가독성/미관)을 위해서는 몇 가지 공통 Python 라이브러리 설치가 필요합니다.
(필요한 경우 이 도구의 이전 Python 2.x 버전을 레거시 브랜치에서 사용할 수 있지만, 더 이상 지원되거나 업데이트되지 않습니다)


설치

Docker

jwt_tool의 권장 사용 방법은 Dockerhub에서 공식 호스팅하는 jwt_tool 도커 이미지입니다.
실행을 위한 기본 명령은 다음과 같습니다:
jwt_tool 실행 기본 명령:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool

위 명령을 사용하면 다른 인수를 평소처럼 추가할 수 있습니다.
현재 작업 디렉터리의 로컬 파일이 도커 컨테이너의 /tmp 디렉터리로 매핑되므로 인수에서 해당 절대 경로를 사용하여 파일을 참조할 수 있습니다.
예:
/tmp/localfile.txt

수동 설치

설치는 jwt_tool.py 파일을 다운로드하거나(git clone으로 저장소를 복제)하면 됩니다.
($PATH에 추가하고 어디서든 호출하려면 파일에 chmod를 실행하십시오.)

$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt

첫 실행 시 도구는 구성 파일, 일부 유틸리티 파일, 로그 파일 및 다양한 형식의 공개 키와 개인 키 세트를 생성합니다.

사용자 정의 구성

  • 스캔 옵션을 최대한 활용하려면 사용자 정의 생성된 JWKS 파일을 URL을 통해 원격으로 액세스할 수 있는 위치에 복사하는 것이 강력히 권장됩니다. 그런 다음 이 주소를 jwtconf.ini에 "jwkloc" 값으로 저장해야 합니다.
  • DNS 조회 및 HTTP 요청과 같은 외부 서비스 상호 작용을 캡처하려면 Burp Collaborator(또는 RequestBin과 같은 대체 도구)의 고유 주소를 구성 파일에 "httplistener" 값으로 입력하십시오.
    구성 파일의 다른 옵션을 검토하여 사용 환경을 맞춤 설정하십시오.

Windows의 색상 버그

Windows cmd/Powershell에서 깨진 색상을 수정하려면 jwt_tool.py에서 아래 두 줄의 주석을 해제하십시오(각 줄 시작 부분의 "# " 제거).
또한 colorama를 설치해야 합니다: python3 -m pip install colorama

root@kitploit:~
# import colorama
# colorama.init()

사용법

첫 번째 인수는 JWT 자체여야 합니다(헤더나 쿠키 값으로 제공하지 않는 경우). 추가 인수 없이 실행하면 검토를 위해 디코딩된 토큰 값이 표시됩니다.
$ python3 jwt_tool.py <JWT>
또는 Docker 기본 명령:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool

툴킷은 토큰을 검증하고 헤더 및 페이로드 값을 나열합니다.

추가 인수

다양한 추가 인수를 사용하면 해당 기능으로 바로 이동하여 테스트에 사용할 수 있는 토큰을 반환받을 수 있습니다.
예를 들어 기존 토큰을 변조하려면 다음을 실행하십시오:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T

많은 옵션은 옵션을 설정하기 위해 추가 값이 필요합니다.
예를 들어 특정 유형의 익스플로잇을 실행하려면 eXploit(-X) 옵션을 선택하고 취약점을 선택해야 합니다(여기서는 alg:none 익스플로잇에 "a" 사용):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a

추가 매개변수

토큰 검증과 같은 일부 옵션은 추가 매개변수/파일을 제공해야 합니다(여기서는 PEM 형식의 공개 키 제공):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem

웹 애플리케이션으로 토큰 보내기

이제 모든 모드에서 토큰을 애플리케이션으로 직접 보낼 수 있습니다.
다음을 지정해야 합니다:

  • 대상 URL(-t)
  • 대상 URL 대신 HTTP 요청을 파일에 넣고 -r로 해당 파일을 참조할 수 있습니다. 이렇게 하면 헤더, 쿠키 및 POST 데이터가 자동으로 채워지므로 권장되는 옵션입니다.
  • 애플리케이션에 필요한 요청 헤더(-rh) 또는 요청 쿠키(-rc) (최소 하나는 토큰을 포함해야 합니다)
  • (선택 사항) POST 데이터 (요청이 POST인 경우)
  • (선택 사항) 모드 또는 변조/주입 옵션과 같은 추가 jwt_tool 옵션
  • (선택 사항) 카나리 값(-cv) - 토큰 사용 성공 시 표시될 것으로 예상하는 텍스트 값(예: "Welcome, ticarpi")
    예제 요청은 다음과 같습니다(강제 오류 유발 스캔 모드 사용):
    $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M er

요청에 대한 다양한 응답이 표시됩니다:

  • 응답 코드
  • 응답 크기
  • 고유 요청 추적 ID(로깅용)
  • 사용된 모드/옵션

일반적인 워크플로

다음은 JWT 구현에 대한 기본 평가를 빠르게 살펴보는 과정입니다. 이러한 옵션으로 성공하지 못한 경우 다른 모드와 옵션을 더 깊이 파고들어 새로운 취약점(또는 제로데이!)을 찾아보십시오.

정찰:

애플리케이션에서 기대하는 클레임/값을 파악하기 위해 토큰 값을 읽습니다:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw

스캐닝:

일반적인 잘못된 구성을 찾기 위해 제공된 토큰을 애플리케이션에 직접 사용하여 Playbook Scan을 실행합니다:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -M pb

익스플로잇:

성공적인 취약점이 발견되면 관련 클레임을 변경하여 이를 악용해 보십시오(여기서는 Inject JWKS 익스플로잇을 사용하고 새 사용자 이름을 주입):
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin

퍼징:

예상치 못한 앱 동작을 식별하기 위해 예상치 못한 값과 클레임을 테스트하거나, 프로그래밍 로직 또는 토큰 처리에 대한 공격을 실행하여 더 깊이 조사합니다:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -I -hc kid -hv custom_sqli_vectors.txt

검토:

로그를 조회하여 요청 및 :에 대한 추가 데이터를 읽음으로써 성공적인 익스플로잇을 검토하십시오:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin


도움말

옵션 목록을 보려면 사용법 함수를 호출하십시오: 토큰 검증과 같은 일부 옵션은 추가 매개변수/파일을 제공해야 합니다:
$ python3 jwt_tool.py -h

더 자세한 사용자 가이드는 위키 페이지에서 확인할 수 있습니다.


JWT Attack Playbook - 새로운 위키 콘텐츠!

playbook_logo

JWT가 무엇인지, 어떤 역할을 하는지, 그리고 취약점, 일반적인 약점 및 의도하지 않은 코딩 오류를 철저히 테스트하는 전체 워크플로에 대한 자세한 설명은 JWT Attack Playbook을 참조하십시오.


팁

Burp Search에서 JWT를 찾기 위한 정규식
('Case sensitive' 및 'Regex' 옵션이 선택되어 있는지 확인하십시오)
[= ]eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]* - url-safe JWT 버전
[= ]eyJ[A-Za-z0-9_\/+-]*\.[A-Za-z0-9._\/+-]* - 모든 JWT 버전(오탐 가능성 더 높음)


추가 자료

  • JWT Attack Playbook (https://github.com/ticarpi/jwt_tool/wiki) - 철저한 JWT 테스트 방법론을 위한 자료

  • JWT에 대한 훌륭한 소개 - https://jwt.io/introduction/

  • 이 도구의 초기 영감의 상당 부분은 Tim McLean이 발견한 취약점에서 비롯되었습니다.
    JWT 약점에 대한 그의 블로그를 여기에서 확인하십시오: https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/

  • Pentesterlab (https://www.pentesterlab.com)에서 JWT 취약점 테스트를 위한 다양한 연습 문제를 제공합니다. 웹 애플리케이션 모의 침투 테스트에 관심이 있다면 PRO 구독을 적극 추천합니다.

    참고 사항: 이 툴킷은 올바르게 사용하면 대부분의 Pentesterlab JWT 연습 문제를 몇 초 안에 해결할 수 있습니다. 그러나 구조와 약점을 직접 파악하면서 이 연습 문제를 직접 풀어볼 것을 강력히 권장합니다. 결국 중요한 것은 배우는 것이니까요...

도구 다운로드