Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Injection SQL

Bonjour à tous,

Je suis actuellement en train de simuler une attaque de type injection SQL en localhost utilisant (http://127.0.0.1. ..........) le serveur apach....

Voilà mon formulaire (partie identifiation):

[code:1:b8820f72f5]<?php
session_start();
$Message = '';
if (isset($_GET['valider']) && $_GET['valider']=='Envoyer')
{

if ((!empty($_GET['id'])) && (!empty($_GET['pwd'])) )

{
$_SESSION['id']=$pseudo = $_GET['id'] ;
//$pseudo = $_GET['id'] ;

$_SESSION['pwd']=$pass = $_GET['pwd'] ;
//$pass = $_GET['pwd'] ;

mysql_connect("localhost", "root","mysql");
mysql_select_db('base');
$result = mysql_query("SELECT * FROM donne WHERE id = '$pseudo' and pwd = '$pass' ;" );

if($result)
{
$enr=mysql_fetch_assoc($result);
$login=$enr["pwd"];
}
else
{
$login="";
}
mysql_close();
if($login == $_SESSION['pwd'] )
{
//header('location:page1.php');
echo 'vous etes connecte';
}
else
{
$_SESSION['id'] = '';
$_SESSION['pwd'] = '';
$Message ='Mauvais login et/ou mot de passe';
}
}
else
{
$Message = 'Au moins un des champs est vide.';
}

}
?>[/code:1:b8820f72f5]


[u:b8820f72f5]
J'ai essayer à plusieurs reprises d'usurper l'identifications, mais je n'y suis pas arriver, est ce le serveur http d'apache qui est sécurisé ou bien c'est moi qui s'y prend mal ?

Merci pour votre aide.

Cordialement,
M.C.
Regarde ton phpinfo. safemode on ? magic quotes ? etc.
de tte maniere si ce script a une vocation à etre sur internet, tu devrai protéger tes variables. Pas de GET mais POST. et mysql_real_escape(), htmlentities() etc.
Essaie un truc du genre en login user et en password:
invalidpass' UNION all select concat("user") user, concat("invalidpass") from donne
A première vue, je peux t'assurer que 3 points de ton script sont vulnérables...

1) $_GET['id'] ;

Pas de traitement de la variable (htmlentities + regex)
Sache que la méthode POST est plus sécurisée que GET

2) $_GET['pwd'] ;

IDEM

3) $result = mysql_query("SELECT * FROM donne WHERE id = '$pseudo' and pwd = '$pass' ;" );

C'est la requête dangereuse typique qui fait que beaucoup de sites tombent 😕

La formulation fait que si tu entre 'OR 1=1# dans le champ, alors le AND sera bypass (en commentaire) et la condition sera réalisée grâca au "1=1" qui est toujours vrai 😥

Voila.