Maison >base de données >SQL >Introduction détaillée à l'injection SQL
1. Comprenez d'abord le principe de l'injection SQL :
Injection SQL : Il s'agit d'insérer des commandes SQL dans le Web Soumettez un formulaire ou entrez un nom de domaine ou une chaîne de requête pour une demande de page, incitant finalement le serveur à exécuter des commandes SQL malveillantes.
Plus précisément, il s'agit de la possibilité d'utiliser des applications existantes pour injecter des commandes SQL (malveillantes) dans le moteur de base de données backend pour exécution. Il peut obtenir une existence en saisissant des instructions SQL (malveillantes) dans un formulaire Web. dans la base de données du site Web, plutôt que d'exécuter des instructions SQL comme le souhaitait le concepteur. Par exemple, de nombreux sites Web de cinéma et de télévision ont divulgué les mots de passe des membres VIP, principalement en soumettant des caractères de requête via des formulaires WEB. Ces formulaires sont particulièrement vulnérables aux attaques par injection SQL. (Provenant de Baidu)
C'est-à-dire que la page du site Web contient des parties qui interagissent avec la base de données (comme la fonction de recherche d'un site Web d'actualités), et lorsque les données sont saisies sur le site Web, les données sont programmé et transmis à la base de données pour exécution Au cours du processus, les développeurs du site Web n'ont pas effectué de traitement de sécurité sur les données correspondantes transmises à la base de données (telles que le filtrage des caractères spéciaux, l'encodage, etc.), permettant aux pirates de transmettre du code malveillant (qui c'est-à-dire des commandes SQL contenant des instructions SQL illégales) via le front-end du site Web. Entrez dans la base de données et exécutez ces instructions SQL à des fins de piratage dans la base de données, provoquant des fuites d'informations sur la base de données, des dommages et d'autres conséquences.
2. Classification générale de l'injection SQL
Classé par type de point d'injection
(1) Type de numéro point d'injection
De nombreux liens Web ont une structure similaire http://www.example.com/12.php?id=1 Les injections basées sur ce formulaire sont généralement appelées points d'injection numériques, la raison en est que le type d'identifiant du point d'injection est un nombre. Dans la plupart des pages Web, telles que l'affichage des informations personnelles de l'utilisateur, l'affichage d'articles, etc., la plupart d'entre elles utilisent cette forme de structure pour transférer l'identifiant et d'autres informations, les transmettre au backend et interrogez-le dans la base de données. Les informations correspondantes sont renvoyées à la réception. Le prototype de ce type d'instruction SQL est probablement select * from table name which id=1. S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante pour le dynamitage : select * from table name which id=1 et 1. =1
(2) Point d'injection de caractères
Le lien Web a une structure similaire http://xwww.example.com/users.php?user=admin Ce formulaire, le type d'utilisateur de son point d'injection est de type caractère, on l'appelle donc point d'injection de caractère. Le prototype de ce type d'instruction SQL est probablement select * from table name which user='admin'. Il convient de noter que par rapport au prototype d'instruction SQL de type injection numérique, il y a plus de guillemets, qui peuvent être des guillemets simples ou doubles. . S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante pour le dynamitage : select * from table name which user='admin' et 1=1 ' Nous devons nous débarrasser de ces guillemets ennuyeux.
(3) Rechercher le point d'injection
Il s'agit d'un type spécial d'injection. Ce type d'injection fait principalement référence au fait de ne pas filtrer les paramètres de recherche lors de la recherche de données. Généralement, il y a "mot-clé=mot-clé" dans l'adresse du lien. Certains ne sont pas affichés dans l'adresse du lien, mais sont soumis directement via le formulaire du champ de recherche. Le prototype de l'instruction SQL soumise par ce type de point d'injection est grossièrement : select * from table name which field like '%keyword%' S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante pour le dynamitage : select * de la table Nom où champ comme '%test%' et '%1%'='%1%'
3. Comment déterminer s'il y a une injection SQL (résumé novice, pour référence uniquement)
Pour faire simple :
Toutes les entrées qui interagissent avec la base de données peuvent déclencher une injection SQL
L'injection SQL est basée sur la soumission des données Les méthodes peuvent être divisées en :
(1) Injection GET : La méthode de soumission des données est GET, et l'emplacement du point d'injection est dans la partie paramètre GET. Par exemple, il existe un tel lien http://xxx.com/news.php?id=1, id est le point d'injection.
(2) Injection POST : Utilisez la méthode POST pour soumettre des données. Le point d'injection se trouve dans la partie données POST, ce qui se produit souvent dans les formulaires.
(3) Injection de cookie : les requêtes HTTP apporteront le Cookie du client, et le point d'injection existe dans un certain champ du Cookie.
(4) Injection d'en-tête HTTP : Le point d'injection se trouve dans un certain champ de l'en-tête de la requête HTTP. Par exemple, il existe dans le champ User-Agent. À proprement parler, Cookie devrait en fait être considéré comme une forme d’injection d’en-tête. Car lors des requêtes HTTP, Cookie est un champ dans l’en-tête.
Après avoir classé selon la méthode de soumission, vous constaterez que les emplacements les plus longs où l'injection SQL se produit se trouvent dans les adresses de lien, les paramètres de données, les informations sur les cookies et les en-têtes de requête HTTP.
Après avoir compris les emplacements où l'injection SQL peut exister, nous devons déterminer si l'injection SQL peut être déclenchée à ces emplacements. Le moyen le plus simple est de saisir et 1=1 (et la forme transformée de et 1=1) à l'emplacement. lieu correspondant. Pour différents types de points d'injection, des guillemets simples doivent être ajoutés de manière appropriée pour les types de caractères, mais pas pour les points d'injection numériques.
4. Classification avancée de l'injection SQL (classée selon l'effet d'exécution)
(1) Injection aveugle basée sur des booléens : Autrement dit, la condition d'injection peut être jugée vraie ou fausse en fonction de la page renvoyée.
(2) Injection aveugle basée sur le temps : c'est-à-dire qu'aucune information ne peut être jugée sur la base du contenu de retour de la page, et des instructions conditionnelles sont utilisées pour vérifier si l'instruction de délai est exécutée (c'est-à-dire si le temps de retour de la page augmente).
(3) Injection basée sur le rapport d'erreurs : c'est-à-dire que la page renverra des informations d'erreur, ou le résultat de l'instruction injectée sera renvoyé directement à la page.
(4) Injection de requête d'union : L'injection en cas d'union peut être utilisée.
(5) Injection de requêtes de tas : L'injection de plusieurs instructions peut être exécutée en même temps.
(6) Injection d'octets larges : L'utilisation de gbk est un encodage multi-octets, deux octets représentent un caractère chinois
Cet article est destiné à votre apprentissage uniquement. N’attaquez jamais de manière malveillante les sites Web d’autres personnes.
Tutoriels recommandés : Tutoriel vidéo SQL en ligne
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!