Detournement d'une adresse dans Form Mail pour spammer

Le
CriCri
Bonjour tlm

J'utilise 'NMS-FormMail' pour traiter les formulaires de plusieurs sites.
'formmail.pl' se situe dans le répertoire 'cgi-bin' sur le serveur en
dehors de la racine des sites et donc inaccessible par http. Sa
configuration contient le paramètre
$postmaster = 'info@mon_domaine.net';
Les destinataires normaux de chaque formulaire soumis et transformé en
e-mail sont entièrement différents.

Un spammeur russe à pourtant su récupérer cette adresse (pour un seul
site) et m'a envoyé régulièrement des formulaires complétés avec des
données aléatoires - y compris des champs faussés qui ne peuvent prendre
- en principe - que les choix proposés dans un menu déroulant; ou bien
calculés par un '.js' à partir d'autres champs. Le champ de texte libre
est rempli d'URL de sites porno.

J'ai mis fin à son jeu en excluant l'adresse concernée du paramètre
'@allow_mail_to' (où il se trouvait auparavant).

Néanmoins j'aimerais comprendre
- comment il a pu récupérer cet e-mail qui ne paraît nulle part ailleurs
- comment il arrive à insérer des données aléatoires dans les champs à
choix multiples ou calculés.

À savoir que les en-têtes montrent que ces formulaires bidons sont
soumis par le moyen normal; et aussi que les formulaires complétés
normalement sont correctement acheminés vers les destinataires prévus.

Merci pour vos idées.

Cordialement
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Xavier Roche
Le #18247731
CriCri wrote:
Un spammeur russe à pourtant su récupérer cette adresse (pour un seul
site) et m'a envoyé régulièrement des formulaires complétés avec des
données aléatoires - y compris des champs faussés qui ne peuvent prendre
- en principe - que les choix proposés dans un menu déroulant; ou bien



Question bête: n'est-ce pas tout simplement une utilisation de votre
script (ie. URL du formulaire de postage) "manuelle" ? [ Ie. envoi
direct des paramètres forgés ; du genre
subject=coucou&from=&body=coucou+c+est+moi ].

Le javascript est actif au niveau du client (navigateur), mais rien
n'empêche de sauter cette étape de taper sur le serveur en direct. C'est
la raison pour laquelle la vérification de paramètres en javascript
n'est pas sûre (car contrôllable par le client)

Un autre grand classique, c'est le retour chariot inséré dans la valeur
d'un des champs, quand le script est très mal fait. Cela permet de
passer à la ligne suivante dans les en-têtes, et y insérer l'en-tête
voulu (comme un To: ou un CC:) ; ou d'y insérer deux retours chariots
pour passer directement au corps du message.
CriCri
Le #18252621
Bonjour et merci pour la réponse

Xavier Roche a écrit :

Question bête: n'est-ce pas tout simplement une utilisation de votre
script (ie. URL du formulaire de postage) "manuelle" ?



Hmmm. Il faudrait vraiment analyser la page et le '.js' (dans un fichier
externe) manuellement - ce serait pénible. Le spammeur serait-il aussi
dévoué?

Je reviens au fait que l'adresse utilisée pour spammer n'est pas celle
du destinataire du formulaire mais celle du 'postmaster', qui ne paraît
que dans le Perl - dans un répertoire interdit d'accès (en principe)
sauf à moi par FTP (avec un mdp que j'ai modifié). Une tentative d'accès
direct donne inéluctablement une erreur.

Et pourtant... je suis en train d'expérimenter avec le Perl.
J'ai un fort soupçon que notre ami arrive à récupérer le paramétrage -
ayant modifier une adresse là-dedans, j'y ai reçu un spam le lendemain.

J'ai donc créé de nouvelles adresses qui ne figurent nulle part ailleurs
et n'ont jamais été utilisées. Je ne les ai mises que dans le Perl à la
place des anciennes. J'attends voir...

[ Ie. envoi direct des paramètres forgés ; du genre
subject=coucou&from=&body=coucou+c+est+moi ].



Il y a 38 champs dans le formulaire dont il s'agit - donc le même nombre
de lignes dans le corps du mail reçu (avec leurs intitulés), plus 'n'
lignes dans le texte libre, plus l'entête créé par FormMail:
"Form submitted by
<>
on 29/2008/12 à 13:03:10".
Tout cela est toujours parfaitement formé.
En fait les champs qui font l'objet d'une 'Option' sont authentiques:
ceux qui sont calculés ou libres sont n'importe quoi.
Donc ça me paraît un chouïa compliqué - sauf à les éditer spécialement
pour moi...

Mais il est vrai que les mails reçus sont basés sur le squelette d'une
réponse normale.

Le javascript est actif au niveau du client (navigateur), mais rien
n'empêche de sauter cette étape de taper sur le serveur en direct.
C'est la raison pour laquelle la vérification de paramètres en
javascript n'est pas sûre (car contrôllable par le client)



D'accord - mais il aurait fallu quand même une étude très
'personnalisée'.

Le HTML et le JavaScript sont assez compliqués:
- dans le premier les adresses sont cachées par des trucs tels
document.writeln( '<input type="HIDDEN" name="recipient" value="' +
'destinataire' + '@' + 'domaine' + '.org">' );
(donc pas facilement récupérables automatiquement)
- le dernier ne fait pas qu'une simple vérification mais le calcul
d'une facture - genre 'Article' x 'Qté' (plusieurs lignes) - 'Remise' +
'Frais de livraison'; puis 'Moyen de paiement' avec un lien à un site de
paiement etc etc).

Un autre grand classique, c'est le retour chariot inséré dans la
valeur d'un des champs, quand le script est très mal fait. Cela
permet de passer à la ligne suivante dans les en-têtes, et y insérer
l'en-tête voulu (comme un To: ou un CC:) ; ou d'y insérer deux
retours chariots pour passer directement au corps du message.



Chaque formulaire reçu est parfaitement formaté avec tous les champs
présents et l'en-tête est complet et parfaitement normal: impossible de
le distinguer d'un vrai.

Il y a toujours quelque chose qui m'échappe...

Cordialement

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
Xavier Roche
Le #18252831
CriCri wrote:
Le HTML et le JavaScript sont assez compliqués:



Nul besoin de le lire. Prenez votre navigateur, allez sur votre page,
remplissez les champs, puis réglez le navigateur pour utiliser comme
proxy quelque chose comme "localhost:10000" et lancez un netcat (nc -l
-p 10000) en local (ou tout programme équivalent). Faites alors
"envoyer" ("submit", ...), vous aurez tout ce qu'il faut pour rejouter
le script à l'infini en remplaçant un ou deux trucs intéresants.
Erwan David
Le #18254351
Xavier Roche
CriCri wrote:
Le HTML et le JavaScript sont assez compliqués:



Nul besoin de le lire. Prenez votre navigateur, allez sur votre page,
remplissez les champs, puis réglez le navigateur pour utiliser comme
proxy quelque chose comme "localhost:10000" et lancez un netcat (nc -l
-p 10000) en local (ou tout programme équivalent). Faites alors
"envoyer" ("submit", ...), vous aurez tout ce qu'il faut pour rejouter
le script à l'infini en remplaçant un ou deux trucs intéresants.



Voire même une extension firefox comme tamper data qui permet de
récupérer lé requête avec tous ses en-têtes et de la rejouer modifiée...

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
CriCri
Le #18254681
Erwan David a écrit :

Voire même une extension firefox comme tamper data...



Quel dommage qu'il n'est pas compatible avec SeaMonkey...

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
CriCri
Le #18254671
Xavier Roche a écrit :

...lancez un netcat (nc -l > -p 10000) en local (ou tout programme
équivalent). Faites alors "envoyer" ("submit", ...), vous aurez tout
ce qu'il faut...



Merci pour le tuyau.
Pour l'instant ça ne marche pas* mais j'ai pigé le principe; je vais
continuer à jouer avec.

Cordialement

--------
*
- un domaine est redirigé vers un sous répertoire d'un autre: je reçois
une erreur de "DNS fwd/rev mismatch" puis "Domaine Web redirection not
found"
- pour un autre je récupère la page de test du serveur Apache de
l'hébergeur.

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
CriCri
Le #18260721
CriCri a écrit :

Et pourtant... je suis en train d'expérimenter avec le Perl. J'ai un
fort soupçon que notre ami arrive à récupérer le paramétrage - ayant
modifier une adresse là-dedans, j'y ai reçu un spam le lendemain.

J'ai donc créé de nouvelles adresses qui ne figurent nulle part
ailleurs et n'ont jamais été utilisées. Je ne les ai mises que dans
le Perl à la place des anciennes. J'attends voir...



Alors j'ai vu...
Mes tests ont démontré que le spammeur récupère les adresses directement
de 'formmail.pl' - et cela très rapidement (donc sûrement pas manuellement).

Le perl se trouve dans le répertoire 'cgi-bin' au même niveau que
'html' qui contient ...le HTML et tout l'autre contenu de plusieurs sites.
Étant donné les infos données par Xavier, comment a-t-il pu automatiser
cela; et comment l'empêcher?

(Curieusement il ne s'attaque qu'à un seul site, bien que le même
'formmail.pl' soit partagé pour traiter les formulaires de deux autres.)

Je vais essayer 'TFmail' (que j'utilise déjà pour un autre site plus
exigeant) à la place de 'FormMail' (c'est plus évolué et les fichiers de
config sont externes au '.pl'). On verra.

Cordialement

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
yamo'
Le #18262631
Salut,

Désolé je poste peut-être une deuxième fois, mon message sur
news.groumpf.org n'a pas l'air d'être arrivé...


CriCri a tapoté, le 30.12.2008 17:30 :
Erwan David a écrit :

Voire même une extension firefox comme tamper data...



Quel dommage qu'il n'est pas compatible avec SeaMonkey...



En modifiant le fichier install.rdf, elle a l'air de s'installer mais je
ne sais pas comment l'utiliser :

avec Seamonkey 2.0 a2)
ou
testé)


Live Http Headers doit aussi permettre de le faire et pas besoin de le
bidouiller pour l'installer, au pire il faut chercher dans les anciennes
versions.

--
Stéphane
http://pasdenom.info
CriCri
Le #18262891
Salut

yamo' a écrit :

testé)

Live Http Headers doit aussi permettre de le faire et pas besoin de le
bidouiller pour l'installer...



Super! Merci - je vais tester les deux.

Cordialement

--
bitwyse [PGP KeyID 0xA79C8F2C]
C'est comme au CNRS; des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
http://www.le-maquis.net
CriCri
Le #18396321
CriCri a écrit :

Je vais essayer 'TFmail' (que j'utilise déjà pour un autre site plus
exigeant) à la place de 'FormMail' (c'est plus évolué et les fichiers
de config sont externes au '.pl'). On verra.



Pour info: j'ai vu.
J'ai remplacé 'FormMail' par 'TFmail' partout - et je n'ai plus eu de
problèmes.
(Les deux proviennent de la même source: 'NMS'/'London Perl Mongers'.)

A priori 'FormMail' donne plus de contrôle (sélection des seules
adresses destinataires acceptées incorporées dans le script); alors que
TFMail ne propose pas cette fonctionnalité - mais toute sa config se
trouve dans des fichiers externes.
(TFMail est plus complet - autorisant par exemple l'upload de fichiers
par le visiteur - mais on n'est pas obligé d'exploiter cette option).

Donc j'en tire la conclusion que le spammeur sait lire me fichiers PERL,
mais pas d'autres externes dans le même répertoire : je n'ai toujours
pas compris le mécanisme précis de cette faille.

--
bitwyse [PGP KeyID 0xA79C8F2C]
Tout ce qui n'est pas moi est incompréhensible.
http://www.le-maquis.net
(nouveau site de divertissement: http://www.denich.org)
Publicité
Poster une réponse
Anonyme