Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL injection afficher la sortie de la requête.

Sujet résolu
3 janvier 2020 à 6:14:42

Bonjour, je tiens à préciser que c'est juste à des fins d'apprentissage. Quand je fais cette requête :

"http://www.site.com/index.php?id=2 union-select-1,2,3,table_name-from-information_schema.tables/*dsl pour les symboles - mais si je le mets pas, je suis bloqué"

la requête fonctionne très bien mais n'affiche pas les tables. Quelque peut me dire pourquoi les tables ne s'affiches pas et comment remedier a ça?

Merci pour vos précieuses reponses!!


-
Edité par Baselin 3 janvier 2020 à 6:15:33

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2020 à 10:15:39

Bonjour,

Cela dépend du code PHP derrière ... Il est peut être protégé contre les injections SQL ...

Baselin a écrit:

la requête fonctionne très bien mais n'affiche pas les tables

Qu'est-ce qui te faire dire que la requête fonctionne bien ?

As-tu accès au code PHP ? Connais-tu avec précision la requête qui utilise la variable $_GET['id']

-
Edité par Benzouye 3 janvier 2020 à 10:17:53

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
3 janvier 2020 à 16:48:00

Benzouye a écrit:

Bonjour,

Cela dépend du code PHP derrière ... Il est peut être protégé contre les injections SQL ...

Baselin a écrit:

la requête fonctionne très bien mais n'affiche pas les tables

Qu'est-ce qui te faire dire que la requête fonctionne bien ?

As-tu accès au code PHP ? Connais-tu avec précision la requête qui utilise la variable $_GET['id']

-
Edité par Benzouye il y a environ 6 heures


Ce qui me fait dire que la requete fonctionne bien c'est que ça ne renvoit pas d'erreur SQL tandis que si j'écris par exemple dfdgdf ça me renvoit une erreur SQL et non je n'ai pas accès au code PHP, aussi, je ne connais pas la requête qui utilise la variable $_GET['id']. Y'a-t-il moyen de remedier à ce problème.

-
Edité par Baselin 3 janvier 2020 à 16:58:53

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2020 à 16:59:16

Baselin a écrit:

je ne connais pas la requête qui utilise la variable $_GET['id']

Alors comment sais-tu que tu dois remonter 4 colonnes ?

Reprenons ce qui se passe si le code PHP n'est pas protégé contre les injections. La valeur de la variable $_GET['id'] est placée telle quelle dans la requête SQL. Imaginons que la requête SQL est celle-ci :

SELECT id, titre, contenu, auteur, date_creation FROM article WHERE id = "$_GET['id']"

En remplaçant la variable par sa valeur tu tentes d'exécuter deux requêtes en union qui n'ont pas le même nombre et type de colonnes ... cela ne peut pas fonctionner ...

Baselin a écrit:

si j'écris par exemple dfdgdf ça me renvoit une erreur SQL

Cela m'étonne ... Une erreur ? Laquelle exactement ?

-
Edité par Benzouye 3 janvier 2020 à 17:00:02

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
3 janvier 2020 à 21:31:20

Je sais qu'il y'a 4 colonnes car j'ai fais UNION-SELECT-1,2,3,4 jusque'à ce qu'il n'y ait pas d'erreur.

L'erreur que ça me renvoit c'est : COULD NOT PERFORM QUERY [IN CLASS_DB]::select * from content where id = 30 dfg.

A-t-il un moyen pour remedier à ce problème?

  • Partager sur Facebook
  • Partager sur Twitter
4 janvier 2020 à 13:47:01

Ce n'est pas une erreur MySQL mais PHP... La gestion des erreurs est faite dans la classe PHP en question ...

Maintenant, il semble que le code PHP ne traite que le premier enregistrement retourné, genre avec PDOStatement::fetch()

Tu pourrais essayer d'ajouter une clause ORDER BY 1 pour faire que ce soit ton UNION qui arrive en premier... mais tu n'auras toujours que le premier résultat si c'est bien ça...

Il faudrait trouver une autre URL qui retourne une liste (avec un paramètre variable) et non un seul enregistrement ... un écran de recherche par exemple.

-
Edité par Benzouye 4 janvier 2020 à 13:49:28

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
4 janvier 2020 à 22:00:12

Benzouye a écrit:

Ce n'est pas une erreur MySQL mais PHP... La gestion des erreurs est faite dans la classe PHP en question ...

Maintenant, il semble que le code PHP ne traite que le premier enregistrement retourné, genre avec PDOStatement::fetch()

Tu pourrais essayer d'ajouter une clause ORDER BY 1 pour faire que ce soit ton UNION qui arrive en premier... mais tu n'auras toujours que le premier résultat si c'est bien ça...

Il faudrait trouver une autre URL qui retourne une liste (avec un paramètre variable) et non un seul enregistrement ... un écran de recherche par exemple.

-
Edité par Benzouye il y a environ 8 heures

Merci de m'avoir éclaircie sur ce sujet.👍

  • Partager sur Facebook
  • Partager sur Twitter