Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/10/2006, 23h06   #1
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Par défaut [FTP] Faille de la fonction htmlentities

Bonjour,

depuis quelque temps, un petit malin s'amuse à modifier la page d'accueil de mo site. Il passe à chaque fois par mon formulaire d'envoie de mail.

La partie du code qui est visée est celle-ci:

Code :
$mail = htmlentities($_POST['mail']);
Vous l'aurez compris, ma variable vient d'un formulaire tout bête. Or je ne comprend pas comment il fait pour passer à travers le htmlentities, car j'ai rajouté du code de vérification des variable et le problème ne peut venir que de là.

Or il me semblait vraiment que le htmlentities était inviolable. Avez-vous une idée de la méthode utilisée ?

Merci
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 00h05   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835


Je pense pas que ça vienne de là. Peux tu nous montrer un peu plus de code ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 02h57   #3
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
De toute façon quand tu as des données dont tu connais le masque, alors tu dois utiliser les expressions régulières.
Si tu ne le fais point, tu es passible des pires sévices
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h49   #4
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Je pense que mon code est propre, mais le voici:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
session_start();
if (!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit();
}
 
	$login = htmlentities($_SESSION['login']);
	$mail = htmlentities($_POST['mail']);
	$adresse = htmlentities($_POST['adresse']);
	$destinataire = htmlentities($_POST['destinataire']);
	$sujet = htmlentities($_POST['sujet']);
	$message = htmlentities($_POST['message']);
 
if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
    if (empty($login) || empty($mail) || empty($adresse) || empty($destinataire) 
	|| empty($sujet) || empty($message)) {
        $erreur = 'Au moins un des champs est vide.';
    }
	else {
 
		$headers ='From: "'.$login.'"<'.$adresse.'>'."\n";
		$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
		$headers .='Content-Transfer-Encoding: 8bit';
 
		mail($destinataire,$sujet,$message,$headers);
 
		echo 'Message correctement envoyé';
 
	}
}
?>
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h51   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Je t'invite fortement à lire cette page :
http://www.phpsecure.info/v2/article...dersInject.php
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 11h12   #6
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bon je viens de lire ce document est c'est très intéressant, mais mon pirate à moi, il est pas si gentil, il fait passer des commande ftp (je peut voir des raté dans les logs) afin de modifier ma première page.

Mais si j'ai bien compris, en mettant des caractère haxdécimaux, la fonction htmlentities devient inopérante et on peut ainsi faire de l'injection de code ?

C'est peut être ça sa technique non ?
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 11h32   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
L'article que je t'ai donné concerne l'envoi d'email. Pas le hack de ta page.


Est-ce que tes logs te font dire que c'est cette page qui est incrimlinée ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 12h03   #8
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Oui car il a provoqué des erreurs du type Parse Error.
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 12h52   #9
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
J'ai des parse error quand je developpe, c'est pas pour ça que je casse mon serveur ! Tu voudrais pas nous les fournir ces logs ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 14h26   #10
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
Citation:
Envoyé par Pahcixam
Mais si j'ai bien compris, en mettant des caractère haxdécimaux, la fonction htmlentities devient inopérante et on peut ainsi faire de l'injection de code ?
Ca concerne plus des attaques XSS... là si le gars tente d'éxécuter des commandes ftp ça vient pas de là... cependant dans le cas d'un corps de mail qui n'est pas censé contenir du html utilise strip_tags() pareil pour tout ce qui est adresse de l'expediteur etc... concernant les attaques CRLF un

Code :
$tavar = str_replace(array("\r","\n"),'',$tavar);
dans les variables destinées au header devrait faire l'affaire... .. .

Concernant les parse errors c'est normal une des premières choses que fait un pirate c'est d'essayer de provoquer des erreur pour essayer de déterminer le path de ton site, les variables qui sont sensible, etc... .. .

Comme le dit Mr N si tu pouvais nous mettre tes logs et les lignes de code incriminées on pourrait peut être trouver d'où ça vient... et en attendant ferme ton site... .. .

@ tchaOo°

ps : tu as signalé les attaques à ton hébergeur... .. ?
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h01   #11
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bon, de toute façon j'avais fermé la portion de site incriminé, mais ça manque pas mal pour mon site. Voici les erreurs les plus redondante que j'ai trouvé dans mes log. j'ai masqué le nom des dossiers pour pas que d'autre petit malin aient la même idée que le premier ! Ce que je ne comprend pas, c'est que les erreurs viennent des lignes avec le htmlentities, or normalement c'est inviolable puisque sa convertit tout les caractères ! Je comprend pas. En attendant merci pour les astuces, j'ai déjà fait les quelques modification, mais j'attend avant de remettre tous ça en ligne.

Code :
1
2
3
PHP Parse error:  parse error, unexpected T_STRING, expecting ']' in home/www/XXXXX/mail/form.php on line 12, referer: http://XXXXXX/mail/
PHP Parse error:  parse error, unexpected $end in home/www/XXXXX/mail/form.php on line 32, referer: http://XXXXX/mail/formulaire.html
PHP Parse error:  parse error, unexpected T_CONSTANT_ENCAPSED_STRING in home/www/XXXXX/mail/form.php on line 13, referer: http://XXXXXX/mail/formulaire.html
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h11   #12
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Il faut que tu saches ce qui a été donné comme requête à ton script.
Que disent les access_logs ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h12   #13
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Mais de toute façon ton code est une vrai passoire. Si tu as une base de donnée, tu n'as même pas de mysql_real_escape_string(). Et partout où c'est possible, il faut utiliser les expressions régulières.
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h14   #14
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Je vois pas d'appels à une base de données donc je vois pas l'utilité de mysql_real_escape_string pour un mail
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h16   #15
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bon j'ai regardé, mais après savoir ce qui était de lui ... Il y a beaucoup de ça en tout cas:

Code :
1
2
3
[XX/XXX/2006:14:49:44 +0200] "GET /mail/form.php HTTP/1.1" 200 -
[XX/XXX/2006:10:52:41 +0200] "POST /mail/form.php HTTP/1.1" 200 -
[XX/XXX/2006:10:52:41 +0200] "GET /mail/formulaire.html HTTP/1.1" 304 -
Mais après ...
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h18   #16
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
A l'intention de JackBeauregard.

Je sais que mon script contient des bourdes puisque je me suis fait hacké. je présente juste le problème.

Après dire que je suis un bon à rien parce que je n'utilise pas d'expression régulière ....

Tout le monde à débuté un jour non. C'est la première fois que j'utilise la fonction mail et j'avoue que j'ai pas cherché bien loin, mais bon.

En tous cas, mais accès sql sont très très sécurisé.
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h18   #17
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Citation:
Envoyé par Mr N.
Je vois pas d'appels à une base de données donc je vois pas l'utilité de mysql_real_escape_string pour un mail
Admettons, mais ça n'est pas htmlentities qui va bloquer un spam par exemple, j'en sais quelque chose. Et c'est sans doute la même chose pour bien des codes pirates. Tu ne vas pas me dire Mr N que quand on reçoit une donnée qui est censée être un mail, la logique ne veut pas que l'on vérifie que l'on a bien reçu un mail, ce au moyen des expregs.

**edit**
J'ai pas dit que t'étais un bon à rien Pahcixam, tu débutes sans doute voilà tout.
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h22   #18
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Je dit pas, mais voilà, j'ai vraiment l'impression que mon code est vraiment pourrit, alors que la plupart des sites d'apprentissage te montre des codes sans htmlentities ou autres...
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h27   #19
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
De toute façon la sécurité c'est très complexe, c'est déjà bien si tu penses dès maintenant à la prendre en compte. Vaut mieux se faire pirater à ses débuts, ça sert de leçon pour la suite.
Bon en tout cas, des posts pour savoir comment sécuriser ses formulaires, y'en a plein le forum.
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 15h30   #20
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Oui et j'en ai lus pas mal, mais je comprend pas comme il a fait pour faire de l'injection de code, étant donné que toutes les données de mon formulaire passent par un htmlentities. A chaque fois !
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h33.


 
 
 
 
Partenaires

Hébergement Web