IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

piratage de la BDD de mon site chez OVH [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut piratage de la BDD de mon site chez OVH
    Salut!

    Une fois de plus je viens chercher des réponses, car je sèche, et le support d'OVH n'est compétent que pour les réponses types qu'ils copient/collent une fois par semaine!! L'incompétence et le j'menfoutisme à l'état pur!!

    Bref, mais comme c'est assez compliqué à expliquer et que j'ai déjà mis en place bon nombre de protections (htaccess, anti-injection sql pour les INPUT, htmlentities() pour ce qui arrive en $_GET, etc.....), je vais déjà tenter une question simple... qui me parait débile, c'est vrai... MAIS...
    -> est-il possible d'accéder à une page d'admin du site (page accessible uniquement par login+pwd!!), sans pour autant se loger????
    -> et pire, peut-on injecter une clé PHPSESSID dans $_POST???

    Je suis la cible d'attaque d'un petit con de St Petersburg qui remplace les data de ma page d'accueil par des pub de sites porno!
    J'ai fait plein de recherches sur des forums spé, j'ai patché plein de choses..... et pourtant il passe toujours!

    Bref, toute aide sera bonne à prendre!
    Et s'il le faut, je ferai l'explication complète, avec code source...........

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    as-tu changé tes mots de passe de connexion : compte OVH et FTP ?, Si non, fais le.
    Le site est-il bâti sur un CMS ? Si oui, le CMS a-t-il été mis à jour ?

    Tu semble utiliser des formulaires, comment protèges-tu ces entrées.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tout est possible en fonction des trous de sécurité qui pourraient exister sur ton site
    Pour POST et GET, l'utilisateur peut envoyer n'importe quelles données vers le serveur : c'est pour cela qu'il faut valider systématiquement leur validité.
    Pour les sessions, de la même façon, c'est le client qui fourni l'id ; si on connait l'id de session en train d'être utilisé par un administrateur, on peut usurper sa session. On peut empecher cela en effectuant des contrôles supplémentaires.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    alors, réponse groupée:
    1.) les pwd: changés 3 fois oui
    2.) CMS perso
    3.) formulaire: les INPUT sont testés avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
     
    function anti_injection($var, $flag)
    {
    	//bannir les instructions sql s'il y en a!
    	$banlist = array (
            "exec", "master_xp", "--", "//", "shutdown", "/*", "*/", "PHPSESSID", "insert", "select", "update", "delete", "distinct", "having", "truncate", "replace",
            "handler", "like", "procedure", "limit", "order by", "group by");
     
     
    	foreach($banlist as $item)
    	{
    		if( stripos ($var, $item) !== false)	{ $var = trim ( str_ireplace ( $banlist, '', $var) ); }
            }
     
     
    	//suppr des car indésirables
     
    	//autorisés: caractères alphanum + accents
    	if( strcmp($flag, GLOBAL_AI_ALPHANUM) == 0 )		{ $var = preg_replace("/[^a-zA-Z0-9À-ÿ]/",'', $var); }		
     
    	//autorisés: caractères alphanum + accents + _-&@()=€/ + ponctuation (.,;!?) + <space>
    	elseif( strcmp($flag, GLOBAL_AI_TEXT) == 0 )		{ $var = preg_replace("/[^_a-zA-Z0-9À-ÿ-'\"\.,;!?&():\@=€\/  ]/",' ', $var); }
     
    	//autorisés: caractères numeric
    	elseif( strcmp($flag, GLOBAL_AI_NUMERIC) == 0 )		{ $var = preg_replace("/[^0-9]/",'', $var); }					
     
    	//autorisés: car alphanum et les signes _ - . & = @ $
    	elseif( strcmp($flag, GLOBAL_AI_PASSWORD) == 0 )	{ $var = preg_replace("/[^_A-Za-z0-9-\.&=\@$]/i",'', $var); }	
     
    	//PAS DE TEST particulier
    	elseif( strcmp($flag, GLOBAL_AI_NOPREG) == 0 )		{ }	
     
    	else												{ echo "ERREUR DEVELOPPEMENT variable ($var) & flag ($flag) <br/>"; return NULL;}
     
    	return $var;
    }
    4.) session: développe un peu là STP..........
    -> quels ctrls supplémentaires?
    -> comment modifier l'ID de session alors?

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    comment tu échappes les données avant persistance ?

    Montre un traitement sql stp.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    heeeeeeeeeeu, je pensais que ça, ça suffisait(??)..........

    cela dit, de vos 2 pistes, je pencherai plus pour celle de l'usurpation de la session admin puisqu'il n'y a pas de login (je log la page php de connexion et elle n'est pas appelée!!) pour modifier les data... et que la page ne peut être affichée sans authentification.

    MAIS, s'il y a encore des filtres à passer sur les data des INPUT (avant de la sauvegarde en base) en plus de ma fonction, je t'écoute.
    Quels autres caractères/expressions faut-il encore filtrer?

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ben, ce que tu fais n'est pas du tout suffisant en matière de sécurité pour des données destinées à être sauvegardées en base.

    Les bases de données ont chacune leurs propres mécanismes d'échappement pour sécuriser le contenu des variables de manière à les rendre inoffensives.

    Pour les fonctions mysql_ c'est mysql_real_escape() (obsolète), pour mysqli_ c'est mysqli_real_escape(), pour PDO, c'est le mécanisme de préparation, rattachement et exécution...

    Et si tu fais juste ceci pour tes valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE ... SET ta_colonne = '".$valeur."'"
    c'est ouvert aux quatre vents...

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    mécanismes d'échappement: ok je rajoute donc encore ça, en plus de mes tests

    update MySql: ben oui c'est comme ça que je stocke mes data, comment sinon, à part avec 1 query sql?

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bon cherche pas plus loin, ton CMS est vulnérable aux injections SQL.

    Toutes les requêtes devraient être écrites comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE ... SET ta_colonne = '".mysql_real_escape_string($valeur)."'"
    ou beaucoup mieux : utiliser PDO

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    aaah ok, échapper la variable dans le UPDATE, ok, parce que sinon oui.... voyais pas comment stocker mes data sans query sql!

    MAIS à priori, ce n'est pas la soucis ici puisque pour en arriver jusque là il faudrait se logger... ce qui n'est pas le cas, à priori!
    D'où la piste "session id" lancée par Sabotage et dont j'aimerais savoir plus........

    CELA DIT, laisse-moi un peu de temps, je poste un schéma complet avec code, pour que tu puisses voir ça sur pièce

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par steph68b Voir le message
    MAIS à priori, ce n'est pas la soucis ici puisque pour en arriver jusque là il faudrait se logger... ce qui n'est pas le cas, à priori!
    Quand tu as une faille du genre injection SQL, le mécanisme d'authentification ne sert plus à rien. Tu es quoi qu'il arrive toujours authentifié même avec un identifiant et mot de passe bidons.

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    accueil.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    <?php require("checkLogged.php"); ?>
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    	<?php require("_head.php"); ?>
    </head>
     
    <body>
     
    	<div id="site">
     
    		<?php 
    			require("admin-deconnexion.php");
    			require("admin-menu.php"); 
    		?>
     
    		<div id="main">
     
    			<?php 
    				require("admin-fonctions.php");
    				require("admin-connexionBDD.php");
     
    				$connexion = mysql_connect($host, $user, $pass);
    				mysql_select_db($bdd, $connexion);
    				log_anti_hack(basename( __FILE__ ));
     
    				$textes=array();
    				$textes=getTextes("index");
     
    				$isFormValid = false;
    				if (count($_POST) > 0)	
    				{
    					$isFormValid = verifLibTextesNotNull($_POST);
    				}
     
    				if ($isFormValid)
    				{
    					$connexion = mysql_connect($host, $user, $pass);
    					mysql_select_db($bdd, $connexion);
    					mysql_query("START TRANSACTION");
     
    					$insertValid = true;
    					$user_maj = $_SESSION["username"];
    					$date_maj = date("d/m/Y - H:i");
     
    					for ($i=0; $i<count($_POST['lib']); $i++)
    					{
    						if (!set1Texte($_POST, $textes, $i, $user_maj, $date_maj))	
    						{ 
    							$insertValid = false; 
    							break;
    						} 
    					}
    					if ($insertValid)	mysql_query("COMMIT");
    					else				mysql_query("ROLLBACK");
     
    					mysql_close();
    				}
    			?>		
     
    			<p>
     
    				<form action="accueil.php" method="post">
     
    					<p align="<?php echo $textes[0]['align'];?>">
    						<?php afficherBoutonsRadio(0, $textes[0]['align']); ?>
    						<input style="text-align:center;" maxlength="<?php echo GLOBAL_MAX_LIB;?>"  type="text" name="lib[]" value="<?php echo $textes[0]['lib'] ?>" size="<?php echo strlen($textes[0]['lib'])?>"/><br/>
    						<input type="hidden" name="id[]" value="<?php echo $textes[0]['id']; ?>" size ="<?GLOBAL_MAX_HIDDEN?>"/><br/>
    						<textarea style="text-align:center;" name="txt[]" rows="2" cols="55" wrap="soft"><?php echo trim($textes[0]['txt'],"\t"); ?></textarea><br/><br/>
    					</p>
    					<br/>
     
    					<?php
    						for ($i=1; $i< count($textes); $i++)
    						{
    							echo "<h2 align=\"" . $textes[$i]['align'] . "\">";
    								afficherBoutonsRadio($i, $textes[$i]['align']);
    								if ($i >= $PREMIER_PARAGRAPHE_ADD_DEL) afficherBoutonDELTextes($textes[$i]['id'], "accueil.php", $textes[$i]['idx'], "index");
    								echo "<input type=\"hidden\" name=\"id[]\" value=\"" . $textes[$i]['id'] . "\" size =\"".GLOBAL_MAX_HIDDEN."\"/>";
    								echo "<input maxlength=\"".GLOBAL_MAX_LIB."\" type=\"text\" name=\"lib[]\" value=\"" . $textes[$i]['lib'] . "\" size=\"" . strlen($textes[$i]['lib']) . "\"/><br/>";
    							echo "</h2>";
    							echo "<textarea style=\"text-align:left;\" name=\"txt[]\" rows=\"5\" cols=\"67\" wrap=\"soft\">" . trim($textes[$i]['txt'],"\t") . "</textarea><br/><br/>";
    						}
    						mysql_close();
    					?>
    				</form>
    			</p>
    		</div>
    	</div>
    	<?php require("_footer.php"); ?>
    </body>
    </html>
    checkLogged.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
    	session_start();
    	require_once("admin-globals.php");
     
    	if( (!isset($_SESSION["username"])) OR (time() - $_SESSION["start"] > GLOBAL_TIMEOUT) )
    	{
    		echo '<script language="Javascript"><!--document.location.replace("login.php");// --></script>';
    	}
    	else	
    	{
     
    		foreach ($_GET as $key => $val) 
    		{
    		  $val = trim(stripslashes(htmlentities($val)));
    		  $_GET[$key] = $val;
    		}
    	}
    ?>
    login.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    <?php ob_start();?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    <?php require("_head.php"); ?>
    </head>
     
    <body>
    	<div id="site">
     
    		<?php 
    			require("admin-connexionBDD.php"); 
    			require_once("admin-fonctions.php");	//***V2.4
    		?>
     
    		<h1><U>Connexion au module d'administration du site</u></h1>
     
    		<br /><br /><fieldset>
    		<legend>Saisissez ci-dessous votre nom d'utilisateur et votre mot de passe</legend>
     
    		<?php
    			if (!isset($_SESSION["username"]))
    			{
    				echo "<p>";
    				echo "<form action=\"login.php\" method=\"post\">";
    				echo "<B>Nom d'utilisateur (10 car. max):</B> <br/>";
    				echo "<input type=\"text\" name=\"login\" maxlength=\"10\" autofocus/><br/><br/>";
    				echo "<B>Mot de passe (20 car. max):</B> <br/>";
    				echo "<input type=\"password\" name=\"pwd\" maxlength=\"20\"/><br/><br/>";
    				echo "<input title=\"se connecter au module d'administration\" type=\"image\" src=\"images/BTlogin32.png\"/>"; 
    				echo "</form>";
    				echo "</p>";
    			}
     
    			require("admin-connexionBDD.php");
    			$connexion = mysql_connect($host, $user, $pass);
    			mysql_select_db($bdd, $connexion);
     
    			if (!isset($_SESSION["id"]) & count($_POST) > 0)
    			{
    				$valide = true;
     
    				if (empty($_POST['login']))
    				{
    					echo "<b style='color: red'>Login requis !</b><br />";
    					$valide = false;
    					$login = "";
    				}
    				else
    				{
    					$login = anti_injection($_POST['login'],GLOBAL_AI_ALPHANUM);
    				}
     
    				if (empty($_POST['pwd']))
    				{
    					echo "<b style='color: red'>Mot de passe requis !</b><br/><br/>";
    					$valide = false;
    					$pwd = "";
    				}
    				else
    				{
    					$pwd = md5(anti_injection($_POST['pwd'],GLOBAL_AI_PASSWORD));
    					$_POST['pwd'] = $pwd;
    				}
     
    				log_anti_hack(basename( __FILE__ ));
     
    				if ($valide)
    				{
    					$query  = "SELECT * FROM admin ";
    					$query .= "WHERE pass = '$pwd' AND id = '$login' LIMIT 1";
    					$resultat = mysql_query($query);
    					$res = mysql_fetch_array($resultat);
    					mysql_close();
     
    					if (mysql_num_rows($resultat) == 1)
    					{
    						session_start();
    						$_SESSION["id"] = $res["id"];
    						$_SESSION["username"] = $res["id"];
    						$_SESSION["maj"] = $res["maj"];
    						$_SESSION["start"] = time();
     
    						echo '<script language="Javascript"><!--document.location.replace("accueil.php");// --></script>';
    					}
    					else
    						echo '<script language="Javascript"><!--document.location.replace("login.php");// --></script>';
    					}
    				}	
    			else 
    			{
    				$login="";
    				$pwd="";
    			}
     
    			if (isset($_SESSION["id"]))
    			{
    				echo "<p>Bonjour ".$_SESSION['username']."</p>";
    				echo "<form action=\"admin-logout.php\" method=\"post\">";
    				echo "<input type=\"submit\" value=\"Déconnexion\"/>";
    				echo "</form><br/>";
    			}
    			else 
    			{
    				echo "<b style='color: red'>Veuillez vous identifier pour poursuivre!<br/><br/>Ou cliquez <a href=\"index.php\">ICI</a> pour revenir au site.</b>";
    				echo "<br/><br/></fieldset><br/>";
    			}
    		?>
    	</div>
    	<?php require("_footer.php");?>
     
    </body></html>
     
    <?php ob_end_flush(); ?>

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ta faille se situe dans login.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query  = "SELECT * FROM admin ";
    $query .= "WHERE pass = '$pwd' AND id = '$login' LIMIT 1";
    $resultat = mysql_query($query);
    Et je serais tenté de te dire que ton script log_anti_hack n'a pas grande utilité

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    donc en clair, échapper $pwd & $login, avec mysql_real_escape_string(), c'est ça?

    et pourquoi log_anti_hack inutile?
    -> c'est comme ça que j'ai vu pour le PHPSESSID et que ej vois les pages appelées ou non............

  15. #15
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    oui, c'est le minimum, après je pense que tu devrais revoir un peu ton code (factoriser un peu mieux pour réduire le risque d'erreur lors des redondances)

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    et pourquoi log_anti_hack inutile?
    -> c'est comme ça que j'ai vu pour le PHPSESSID et que ej vois les pages appelées ou non............

    188.143.232.211 Saint Petersburg / Russian Federation accueil.php clé (PHPSESSID) = (5187b69b275de71744fb3380719319a3)

  17. #17
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    non je me suis trompé c'est le script anti_injection : la preuve tu filtres à mort et la faille subsiste encore -> utilité proche de zéro

    Tu dois utiliser les bons outils aux bons endroits pour t'assurer de ce que tu manipules.

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    pourtant je l'ai testée, elle fonctionne vire les mots sql et ne conserve bien que les caractères autorisés........... capte pas!!

    mais donc, juste pour être sûr et bien comprendre, pas pour remettre en cause ton expertise:
    -> ce serait le seul & unique problème??

    parce que comme je disais accueil.php appelle checklogged.php qui soit renvoie à accueil.php si déjà connecté, soit appelle login.php qui lui-même renvoie vers accueil.php après connexion.

    or, si j'ai bien dans mon log, l'appel à accueil.php, RIEN par contre pour login.php qui est pourtant aussi tracé!

    donc, comment pourrait-il exploiter la faille de real_escape() de login.php sans appeler cette page??

    phrase de départ: 100_stéphane=à été; où master_xp monica & août. delete l'rêve-mène /* (#/ moi |^) toto & "citation!" @,? ('toi' (SELECT 2me INSERT) (order by HAVING)

    phrase traitée ALPHANUM: 100stéphaneàétéoùmonicaaoûtlrêvemènemoitotocitationtoi2me
    ----------------------------------------------
    phrase traitée TEXT: 100_stéphane=à été; où monica & août. l'rêve-mène ( / moi ) toto & "citation!" @,? ('toi' ( 2me ) ( )
    ----------------------------------------------
    phrase traitée NUMERIC: 1002
    ----------------------------------------------
    phrase traitée PASSWORD: 100_stphane=tomonica&aot.lrve-mnemoitoto&citation@toi2me
    ----------------------------------------------
    phrase traitée NOPREG: 100_stéphane=à été; où monica & août. l'rêve-mène (#/ moi |^) toto & "citation!" @,? ('toi' ( 2me ) ( )
    ----------------------------------------------

    et dans le code posté, que changerais-tu pour mieux factoriser?

  19. #19
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Je commencerais par scanner mon PC de dév par un antivirus et rootkits scanner (j'avais déjà vu un cas similaire au tien, le mec avait un cheval de troie sur son pc de dév...)

    Ensuite vérifie la manière dont tu montes tes URL : échappe bien tous les paramètres avec html_build_query()
    Puis, vérifie que toutes les valeurs en provenance d'un utilisateur et affichées dans le HTML soient échappées avec htmlspecialchars() (tout le texte, tous les commentaires...)

    tu devrais remplacer dans checkLogged.php la redirection par quelque chose de plus standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: login.php');
    exit; // obligatoire après une redirection
    après pour ce qui est de la factorisation, j'attaquerais par tout ce qui est relatif aux connexions.

    Est ce que dans ton log avant que le site soit piraté, tu as une URL alambiquée ?

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    - scan AV tous les jours et je tourne avec un scan antispy/rootkit différent aussi tous les jours un autre (adware, spybot, sophos antirootkit, malwarebyte's, emsisoft anti malware, etc...)

    - mes url sont toutes en dur dans le code

    - log: non il arrive directement sur accueil.php et y passe son PHPSESSID en $_POST...............
    => je log $_POST (que je retourve donc dans mes log) et $_GET (là, que dale par contre!)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PDO] Lier ma bdd a mon site web
    Par klawee dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2013, 10h14
  2. Héberger mon site chez moi
    Par bimus dans le forum Chez soi
    Réponses: 3
    Dernier message: 17/01/2008, 22h35
  3. J'ai besoin de vos conseils pour mon site chez-Gaëlle
    Par Gaëlle71 dans le forum Mon site
    Réponses: 2
    Dernier message: 30/04/2007, 23h09
  4. Réponses: 3
    Dernier message: 03/10/2006, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo