[Hack Email] Injecter des formulaires de contact
Coucou à tous,
ça faisait un petit paquet de temps que je voulais vous en parler, mais chaque fois j'ai eu d'autres sujets sur la table ..
- Et puis c'est long à expliquer ....
- Et puis je suis un feignant ...
- Mais là je m'y mets vraiment !
Votre site envoie du spam à la terre entière ?
Vous vous êtes fait blacklister ...
Tous vos mails finissent en indésirables ;)
Je vais vous montrer une petite ruse de sioux qui est peut-être à l'origine de votre problème !
Tout d'abord ... un contexte ...
Un vilain Hacker, se baladant sur votre site, tombe nez à nez avec un formulaire de contact !
Aussi lorsqu'il remplit et valide ce formulaire de contact ...
Automatiquement quelqu'un reçoit le message ...
Mais notre Hacker a de la suite dans les idées !
Il se doute bien que les formulaires sont rarement protégés contre "L'injection d'entête" !
Pour vous donner un ordre d'idées :
L'entête d'un mail (partie qui est souvent caché par logiciel de messagerie), ça ressemble à ça :
Aussi on voit bien que notre entête contient un "from", un "to", un "subject", ...
L'attaque ressemble beaucoup à la méthodologie appliquée pour les injections SQL
Sauf qu'au lieu d'envoyer un :
' union select ...
Pour une requête SQL :
SELECT .... WHERE ID=1 ' union select ...On va appliquer le même principe pour l'entête de notre mail !
Admettons que notre webmaster envoie un mail de cette manière-là :
mail(
"[email protected]",
"Sujet du contact",
"message de contact",
"from : Internaute <adresse_fourni_par_linternaute>"
);
Si notre hacker envoie :
[email protected]> to: [email protected] |
|
Sujet | Coucou |
Message | Comment ça va |
Le code de notre webmaster deviendra :
mail(
"[email protected]",
"Coucou",
"Comment ça va",
"from : Internaute <[email protected]>
to: [email protected]>"
);
Notre hacker aura ainsi biaisé notre code !!!!
Aussi, cette technique peut s'appliquer dans divers contextes et sur divers champs, mais vous aurez compris le principe.
Bref, après la théorie, expérimentons un peu tout ça dans la pratique ;)
Notre hacker se rend sur le formulaire de contact, il modifie un peu le code du formulaire, pour transformer le champ texte en textarea ( ce qui lui permet de faire des retours à la ligne )
Pour finir, il injecte un retour à la ligne suivie d'un To pointant vers [email protected]....
Que ce passe t-il lorsqu'il valide ?
Hop ... le mail est envoyé .... à qui ???
Notre Webmaster , mais lorsque l'on regarde de plus près ... on remarque .... [email protected] ....
Voilà ...
Pour sécuriser ça ?
- Contrôler l'adresse email avec des REGEX coté frontale (Javascript) , mais aussi coté backend (PHP) ...
- Supprimez les retours chariots là où il n'y a pas lieu d'en avoir
- Supprimez les caractères spéciaux du sujet
- ...
Bref c'est vraiment au cas par cas, mais tester un peu formulaire en faisant des moulinettes qui envoient n'importe quoi dans vos champs ;)
Bravo, c est clair et net !
Comment forcer un champ à accepter des caractères spéciaux ?
J’ai parfois réussi en balançant des balises tronqués ou en doublant triplant les conversions ascii, mais je me pose vraiment la question de comment forcer un formulaire ou Bypasser sa protection en trompant les guillemets d’échappement, il y’a bien une faille exploitable, comme a pu le faire le mec qui a vérolé wathsapp en bluffant la conversion des caractères spéciaux. Je suis buter sur ce défi depuis des lustres.
Une piste ?