Mon site ce fait hacker, help

Petit nouveau ! | 3 Messages

15 juil. 2014, 08:11

Bonjour, depuis quelques jours je subit des hack sur mon site web. Il doit y avoir une faille de sécurité quelque part mais je n'arrive pas a trouvé ou

Est-ce quelqu'un pourrai m'aider ?

Voici les infos :
Site web : www.olivale.com
System utilisé : c'est du fait maison
Les symptome : Ben quelqu'un arrive a modifier la base de donnée et mettant des truc typique "Hacked by bla bla"...

Comment je ne sais pas, injection SQL, faille dans le login, droit d'acces sur des répertoires d'upload,......
j'ai pourtant vérifié au niveau des injection SQL, je ne vois pas d'erreur

Si quelqu'un est disposé a prendre un peu de temps pour mon problème (et je l'en remercie infiniment d'avance !) dites-moi ce qu'il te faut ?

Merci beaucoup pour votre aide, je ne sais plus quoi faire !
Bonne journée.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juil. 2014, 11:58

salut,

on ne peux pas trop t'aider comme cela.
sache que le /admin est a éviter, trouve un autre nom de répertoire qui ne correspond à rien de standard.
Il est possible que le "hacker" ai utiliser un "simple" brute force pour trouver une combinaison valide.
as tu essayé de changer les noms d'utilisateur et mot de passe ? (différents des existants, 8 caractères mini pour le mot de passe avec une combinaison alphanumérique, contenant des minuscule et des majuscules. Utilise aussi un caractère de ponctuation ou dans le genre ("~.;,?:/!§ etc etc) cela rendra plus complexe la recherche du mot de passe.

est ce que tu as un fichier de configuration accessible directement par le net ?

as tu des formulaires d'upload ? (si oui il faut vérifier le fonctionnement, est ce que tu laisse la possibilité d'uploader n'importe quoi ou pas etc etc).

globalement sans code on ne peux pas t'aider plus que ce que tu trouvera à l'aide de google ;)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 2278 Messages

15 juil. 2014, 12:41

J'ajouterai que le nom de l'administrateur de Mysql ne devrait être
ni root
ni admin
ni administrateur
ni rien qui vienne à l'esprit d'un francophone ou d'un anglophone
qu'il faut mettre un mot de passe assez complexe...
Je ne sais pas si l'analyse des logs permettrait de voir quelque chose...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

15 juil. 2014, 14:16

Merci pour votre analyse, j'ai déplace l'admin vers un adresse plus compliquée.
De plus tous les mots de passe, user etc. sont complexe.

Si ca peux vous aider je vous met quelques exemple de code, peut-être que vous verrez qqch de suspect :

validation du login a l'admin
<?php include '../include/connexion_db.php'; 
	 
	$query = "SELECT ADMIN_ID FROM administration WHERE ADMIN_USER = '".mysql_real_escape_string($_POST["username"])."' AND ADMIN_MDP = '".mysql_real_escape_string($_POST["password"])."'";
	$result = mysql_query($query);
	
	$row = mysql_fetch_row($result);
	$id = $row[0];
	
	if ($id == '0')
	{
	 	echo "<script language='javascript' type='text/javascript'>\n
		      window.location.replace('home.php');\n
	     	  </script>"; 										  
	
		$_SESSION['login'] = "ok";	
	}
	else
	{		  
	   	echo "<script language='javascript' type='text/javascript'>\n
	 	      window.location.replace('index.php?msg=1');\n
	          </script>"; 
	} 
	
	include '../include/deconnexion_db.php'; 
?>
upload de photos
<?php 
	include '../include/connexion_db.php'; 
	$dest_dossier = '../upload_shop/';
	
	$isOk = 0;
		  
	/***********************************************************************************************************************
	    TRAITEMENT DE LA PHOTO 1
	***********************************************************************************************************************/
	if(isset($_FILES['file']))
	{		
		// formatage nom fichier : enlever les accents, remplacer les caracteres autres que lettres, chiffres et point par _  	
		$timestamp=date("U"); //SECONDES ECOULEES DEPUIS LE 1ER JANVIER 1970
		$dest_fichier = basename($_FILES['file']['name']);
		$dest_fichier = strtr($dest_fichier, '¿¡¬√ƒ≈«»… ÀÃÕŒœ“”‘’÷Ÿ⁄€‹›‡·‚„‰ÂÁËÈÍÎÏÌÓÔÚÛÙıˆ˘˙˚¸˝ˇ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
		$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
			
		if ($dest_fichier != '')												
		{
			// copie du fichier														
			$dest_fichier=$timestamp.'_'.$dest_fichier;
			move_uploaded_file($_FILES['file']['tmp_name'], $dest_dossier . $dest_fichier);	
		}	
		else
			$dest_fichier = ''; 
		
		$queryFree = "SELECT UIS_1, UIS_2, UIS_3, UIS_4, UIS_5 FROM uploadimagesshop WHERE UIS_ID = '0'";
		$resultFree = mysql_query($queryFree);
		$rowFree = mysql_fetch_row($resultFree);
		$image_1 = $rowFree[0]; 
		$image_2 = $rowFree[1];
		$image_3 = $rowFree[2];
		$image_4 = $rowFree[3];
		$image_5 = $rowFree[4];
		 
		
		 
		if (($image_1 == "NA") && ($isOk == 0))
		{		
			$query = "UPDATE uploadimagesshop SET UIS_1 = '$dest_fichier' WHERE UIS_ID = '0'";
			$result = mysql_query($query);
			$isOk = 1;
		}
		if (($image_2 == "NA") && ($isOk == 0))
 		{
			$query = "UPDATE uploadimagesshop SET UIS_2 = '$dest_fichier' WHERE UIS_ID = '0'";
			$result = mysql_query($query);
			$isOk = 1;
		}		  
		if (($image_3 == "NA") && ($isOk == 0))
 		{
			$query = "UPDATE uploadimagesshop SET UIS_3 = '$dest_fichier' WHERE UIS_ID = '0'";
			$result = mysql_query($query);
			$isOk = 1;
		}		
		if (($image_4 == "NA") && ($isOk == 0))
 		{
			$query = "UPDATE uploadimagesshop SET UIS_4 = '$dest_fichier' WHERE UIS_ID = '0'";
			$result = mysql_query($query);
			$isOk = 1;
		}	  
		if (($image_5 == "NA") && ($isOk == 0))
 		{
			$query = "UPDATE uploadimagesshop SET UIS_5 = '$dest_fichier' WHERE UIS_ID = '0'";
			$result = mysql_query($query);
			$isOk = 1;
		}
	}	
	
	echo "<script language='javascript' type='text/javascript'>\n
		 window.location.replace('uploadImages.php');\n
		 </script>";	  							   

include '../include/deconnexion_db.php'; ?>

Modification de produits
<?php 
	include '../include/connexion_db.php'; 
	include 'valid_login.php'; 
	
	if ( isset( $_GET['id'] )) $id = mysql_real_escape_string($_GET['id']);
	
	if ( isset( $_POST['etat'] )) $etat = mysql_real_escape_string($_POST['etat']);
	if ( isset( $_POST['nom'] )) $nom = mysql_real_escape_string($_POST['nom']);
	if ( isset( $_POST['categorie_id'] )) $categorie_id = mysql_real_escape_string($_POST['categorie_id']);
	if ( isset( $_POST['sous_categorie_id'] )) $sous_categorie_id = mysql_real_escape_string($_POST['sous_categorie_id']);
	if ( isset( $_POST['prix_1'] )) $prix_1 = mysql_real_escape_string($_POST['prix_1']);
	if ( isset( $_POST['prix_2'] )) $prix_2 = mysql_real_escape_string($_POST['prix_2']);
	if ( isset( $_POST['prix_3'] )) $prix_3 = mysql_real_escape_string($_POST['prix_3']);
	if ( isset( $_POST['prix_4'] )) $prix_4 = mysql_real_escape_string($_POST['prix_4']);
	if ( isset( $_POST['prix_5'] )) $prix_5 = mysql_real_escape_string($_POST['prix_5']);
	if ( isset( $_POST['contenant_id_1'] )) $contenant_id_1 = mysql_real_escape_string($_POST['contenant_id_1']);
	if ( isset( $_POST['contenant_id_2'] )) $contenant_id_2 = mysql_real_escape_string($_POST['contenant_id_2']);
	if ( isset( $_POST['contenant_id_3'] )) $contenant_id_3 = mysql_real_escape_string($_POST['contenant_id_3']);
	if ( isset( $_POST['contenant_id_4'] )) $contenant_id_4 = mysql_real_escape_string($_POST['contenant_id_4']);
	if ( isset( $_POST['contenant_id_5'] )) $contenant_id_5 = mysql_real_escape_string($_POST['contenant_id_5']);
	if ( isset( $_POST['description'] )) $description = mysql_real_escape_string($_POST['description']);
	
	$query_nbr_entree = "SELECT UIS_1, UIS_2, UIS_3, UIS_4, UIS_5 FROM uploadimagesshop WHERE UIS_ID = '0'";
	$result_nbr_entree = mysql_query($query_nbr_entree);
	$row = mysql_fetch_row($result_nbr_entree);
	$images_1 = $row[0];		
	$images_2 = $row[1];		
	$images_3 = $row[2];		
	$images_4 = $row[3];		
	$images_5 = $row[4];		
	
	$query = "UPDATE shop SET SHOP_ETAT = '$etat', SHOP_NOM = '$nom', SHOP_PRIX_1 = '$prix_1', SHOP_PRIX_2 = '$prix_2', SHOP_PRIX_3 = '$prix_3', SHOP_PRIX_4 = '$prix_4', SHOP_PRIX_5 = '$prix_5', SHOP_CON_1_ID = '$contenant_id_1', SHOP_CON_2_ID = '$contenant_id_2', SHOP_CON_3_ID = '$contenant_id_3', SHOP_CON_4_ID = '$contenant_id_4', SHOP_CON_5_ID = '$contenant_id_5', SHOP_PHOTO_1 = '$images_1', SHOP_PHOTO_2 = '$images_2', SHOP_PHOTO_3 = '$images_3', SHOP_PHOTO_4 = '$images_4', SHOP_PHOTO_5 = '$images_5', SHOP_DESCRIPTION = '$description', SHOP_CAT_ID = '$categorie_id', SHOP_SOUSCAT_ID = '$sous_categorie_id' WHERE SHOP_ID = '$id'";
	$result = mysql_query($query);	

	// VIDAGE DE LA TABLE TEMPORAIRE DES IMAGES
	$queryImage = "UPDATE uploadimagesshop SET UIS_1 = 'NA', UIS_2 = 'NA', UIS_3 = 'NA', UIS_4 = 'NA', UIS_5 = 'NA' WHERE UIS_ID = '0'";
	$resultImage = mysql_query($queryImage);
	
	
	echo "<script language='javascript' type='text/javascript'>\n
		 window.location.replace('shop_edit.php?id=$id&modif_info=edit');\n
		 </script>";		

	include('../include/deconnexion_db.php'); 
?>

contenu de connexion_db.php
<?php
	session_start();

	$db_host = "mysql.olivale.com"; 
	$db_user = "xxxxx";
	$db_pass = "xxxxx";
	$db_name = "xxxxx";	 
	
	mysql_connect($db_host, $db_user, $db_pass);
	mysql_select_db($db_name);	  
?>
Merci pour votre aide !
Modifié en dernier par moogli le 15 juil. 2014, 15:45, modifié 1 fois.
Raison : correction bbcode

Mammouth du PHP | 2278 Messages

15 juil. 2014, 14:49

certains conseillent de ne passer dans la requete que ADM/IN_USER (ici) et de comparer le mot de passe retourné par le SGBD avec celui qui a été saisi.
$query = "SELECT ADMIN_ID FROM administration WHERE ADMIN_USER = '".mysql_real_escape_string($_POST["username"])."' AND ADMIN_MDP = '".mysql_real_escape_string($_POST["password"])."'";

Ceci étant, le hack est difficile à contrôler : aussi bien phpfrance que framasoft que mon propre site (SPIP) qui sont faits avec des CMS différents se font hacker régulièrement..Autre remarque marginale : très beau site que le tien...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 804 Messages

21 juil. 2014, 11:07

Bonjour,

J'ai eu le même problème que toi, le seul conseil que je peu te donner c'est de commencer par changer ta façon de programmer et utiliser des requête préparées, oubli pas nom plus de travail registre global Off et tester toute tes variables.

Le hack de site est très rapide si tu néglige ta façon de programmer et si tu évolue pas, bien entendu c'est 90% des sites de vente en ligne qui ramasse, mais si c'est juste des petit message tu as forte change d'avoir à faire à un petit boutonneux qui veux prouver qu'il le meilleur du monde à ces copains et passe surement par une injection au moment de l'ajout de produit ou autre, si il avait atteint t'a base de donnée il aurait tout effacer.

dog

Eléphanteau du PHP | 46 Messages

24 juil. 2014, 12:46

Bonjour,

Au delà de la façon de programmer (bien que nécessaire), regardez aussi la protection htaccess :

https://secure.rivalhost.com/knowledgeb ... hacks.html

Une injection SQL se fait en GET ou POST, c'est facilement detectable, c'est une sorte de "pare-feu applicatifs".
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières