logo Homepage
+  NewbieContest
|-+  Programmation» Langages Web» [PHP]script injection sql
Username:
Password:
Pages: [1] 2
  Imprimer  
Auteur Fil de discussion: [PHP]script injection sql  (Lu 11205 fois)
nofx
Profil challenge

Classement : 1834/55046

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« le: 15 Mars 2007 à 09:12:31 »

bonjour à tous,

je me suis fait un petit script pour voir l effet des injections sql mais cela ne fonctionne pas pourtant mon script et des plus basic sans aucunes protections!

Code:
$pseudo = $_POST['pseudo'];
$passe = $_POST['passe'];
$requete=mysql_query("SELECT * FROM admin WHERE pseudo='$pseudo' AND passe='$passe'") OR die(mysql_error());
if(mysql_num_rows($requete)!==0)
{
echo "bienvenue";
}
else
{
echo "perdu";
}
voila en fait je perd tout le temps ! si quelqu'un peut il me dire pourquoi? merci d avance
Journalisée
zours

Profil challenge

Classement : 555/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« #1 le: 15 Mars 2007 à 10:54:29 »

Pour moi il est parfaitement injectable ce script. Ca pourrait être une bonne idée que tu nous donnes des exemples de ce que tu as tenté, qu'on te dise ce que tu fais mal (non, je ne donne pas d'exemple d'injection tout de suite, c'est volontaire).
Journalisée
nofx
Profil challenge

Classement : 1834/55046

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #2 le: 15 Mars 2007 à 11:05:35 »

Ben il me parrait tres mal proteger aussi

Voici quelques tentatives!

Donc dans pseudo:     jean'");\\

apres **orthographe !** tenter : jean' OR '1'='1'");\\

jean'");#

OR 1=1'");\\

Ce sont les tentives que je trouvais les plus propables
Journalisée
Zmx

Profil challenge

Classement : 75/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #3 le: 15 Mars 2007 à 11:33:35 »

magic_quote ?
Journalisée

nofx
Profil challenge

Classement : 1834/55046

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #4 le: 15 Mars 2007 à 11:41:39 »

ah jsai pas si les magics quotes sont activées par défaut avec wamp!
Ou dois-je regarder pour voir si elles sont activées?
merci



J ai trouve merci mais maintenant je n ai plu qu'à trouver la bonne syntaxe car pour le moment j ai ca comme reponse

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '");#' AND passe=''' at line 1
Journalisée
nofx
Profil challenge

Classement : 1834/55046

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #5 le: 15 Mars 2007 à 15:52:17 »

Merci je viens de découvrir l'éfficacité des magic_quote et j ai reussis quelques injections..
Maintenant j essaie dautre injections avec un autre script genre id=1'...
merci quand meme
Journalisée
Gardel

Profil challenge

Classement : 677/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1012


Voir le profil
« #6 le: 15 Mars 2007 à 16:12:40 »

Ton code est bizarrement fait, ça fonctionne avec des variables entre ' ' ? :s Ca doit être pris pour des chaines de caracteres... donc ce serait toujours faut.
De plus, tu devrais inverser Perdu et Bienvenue car c'est si la requete te retourne 1 enregistrement que c'est binvenue.

Essaye plutot avec ça :

Code:
$requete = mysql_query('SELECT * FROM admin WHERE pseudo = '.$_POST['pseudo'].' AND pass = '.$_POST['pass']) OR die(mysql_error());
if(!mysql_num_rows($requete))
    echo 'Perdu';
else
    echo 'Bienvenue';
Journalisée

Selon le postulat que les filles, c'est du temps accordé et de l'argent dépensé : Filles = Temps . Argent
Et comme chacun le sait, "le temps c'est de l'argent", donc : Temps = Argent
Par conséquent : Filles = Argent . Argent
Et parce que, "l'argent est la racine du mal" : Argent = sqrt(Mal)
On en déduit que : Filles = sqrt(Mal).sqrt(Mal)
Force est de constater que : Filles = Mal
Zmx

Profil challenge

Classement : 75/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #7 le: 15 Mars 2007 à 17:04:21 »

Citation de: Gardel
Ca doit être pris pour des chaines de caracteres...
Euh ... c'est le but que le contenu de la variable soit prit comme une chaine de caractere (ou alors j'ai rien compris a ta remarque)

Au final on veux SELECT * FROM ADMIN WHERE pseudo='<maChaine>' , non ?
Journalisée

Gardel

Profil challenge

Classement : 677/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1012


Voir le profil
« #8 le: 15 Mars 2007 à 17:40:37 »

Ce qu'on veut rechercher dans la requête, c'est la valeur de la variable $pseudo et non la chaine de caractères '$pseudo'

Ce qui est mis entre single quotes n'est pas interprêté non ?
Journalisée

Selon le postulat que les filles, c'est du temps accordé et de l'argent dépensé : Filles = Temps . Argent
Et comme chacun le sait, "le temps c'est de l'argent", donc : Temps = Argent
Par conséquent : Filles = Argent . Argent
Et parce que, "l'argent est la racine du mal" : Argent = sqrt(Mal)
On en déduit que : Filles = sqrt(Mal).sqrt(Mal)
Force est de constater que : Filles = Mal
Zmx

Profil challenge

Classement : 75/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #9 le: 16 Mars 2007 à 08:59:08 »

ah j'ai compris ta remarque.
Je prend 20 sec pour tester.

Code:
<?
$test = 'toto';
echo " test $test\n";
echo 'test $test\n';
?>
Le code suivant a la sorti suivante:
Code:
(zmx@localhost)[~]-% php test.php 
 test toto
test $test\n
A prioris ça marche comme le perl.
avec des "" les variable et caractere d'escape sont prit en compte, avec les '' on a ce qu'on mets dedans (ni var, ni escape.)
Donc "SELECT * FROM admin WHERE pseudo='$pseudo' AND passe='$passe'" est correct.
Journalisée

nofx
Profil challenge

Classement : 1834/55046

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #10 le: 16 Mars 2007 à 13:26:31 »

salut,
ca
SELECT * FROM admin WHERE pseudo='$pseudo' AND passe='$passe'
et
ca
SELECT * FROM admin WHERE pseudo='".$pseudo."' AND passe='".$pseudo."'


ca fait la meme chose apres je sais pas si au niveau de la syntaxe laquelle et la plus correcte.

Sinon c'etait bien les magics_quotes qui etaient activées.
le script fonctionne bien.
Journalisée
zours

Profil challenge

Classement : 555/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« #11 le: 16 Mars 2007 à 14:44:30 »

Citation de: Gardel
Ce qu'on veut rechercher dans la requête, c'est la valeur de la variable $pseudo et non la chaine de caractères '$pseudo'

Ce qui est mis entre single quotes n'est pas interprêté non ?
Nawak.
Code:
'$machin' <--- Pas interprété.
"'$machin'" <--- Interprété.
Pour donner quand même un peu plus d'infos : c'est pas le fait que ça soit entre single quotes ou non qui fait que ça soit interprété, c'est le fait qu'elles soient ou non les délimiteurs de chaîne. Si tu prends des double quotes comme délimiteur, les single quotes que tu pourrais mettre dedans sont vues comme des caractères normaux. Donc pas de raison que la variable ne soit pas interprétée.
Journalisée
Gardel

Profil challenge

Classement : 677/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1012


Voir le profil
« #12 le: 16 Mars 2007 à 14:59:03 »

Ah ouai ok je voyais pas ça comme ça.
'fin bon vaut mieux de toute façon prendre l'habitude de concaténer, au moins on est sûr de ce qu'on fait et surtout c'est plus rapide à l'exécution (ok ici pas besoin de rapidité mais bon :p)
Journalisée

Selon le postulat que les filles, c'est du temps accordé et de l'argent dépensé : Filles = Temps . Argent
Et comme chacun le sait, "le temps c'est de l'argent", donc : Temps = Argent
Par conséquent : Filles = Argent . Argent
Et parce que, "l'argent est la racine du mal" : Argent = sqrt(Mal)
On en déduit que : Filles = sqrt(Mal).sqrt(Mal)
Force est de constater que : Filles = Mal
zours

Profil challenge

Classement : 555/55046

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« #13 le: 16 Mars 2007 à 17:11:21 »

Nan. J'avais vu des benches à ce sujet, je posterai le lien si je le retrouve. Le plus rapide, c'est avec les ob_start() et compagnie .
Journalisée
Ge0

Profil challenge

Classement : 18/55046

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #14 le: 14 Avril 2007 à 13:12:10 »

Bon, je survole le topic vite fait.

Nofx, pour ton code du début, si tu veux te tester aux injections SQL, tu n'as deux solutions pour que ça passe :
- Tu trouves php.ini, tu recherches cette ligne :
Code:
magic_quotes = On
Tu remplaces On par Off

- Tu utilises stripslashes(), qui enlève les antislashs à tes variables...

Désolé si cela à été énoncé plus tôt ^^

Edit : si je reprends ton code du début, ça doit te faire ça (avec les stripslashes() )

Code:
$pseudo = stripslashes($_POST['pseudo']);
$passe = strispslashes($_POST['passe']);
$requete=mysql_query("SELECT * FROM admin WHERE pseudo='$pseudo' AND passe='$passe'") OR die(mysql_error());
if(mysql_num_rows($requete)!==0)
    {
    echo "bienvenue";
    }
    else
    {
    echo "perdu";
    }
Journalisée
Pages: [1] 2
  Imprimer  
 
Aller à: