Cet article se concentre principalement sur la signification de l'injection SQL et sur la manière d'effectuer une injection SQL. Les personnes concernées sont principalement des testeurs. Comprendre comment effectuer une injection SQL peut nous aider à tester les vulnérabilités des attaques SQL dans les modules de connexion, de publication et autres. Quant à la façon d'empêcher l'injection SQL, il faut comprendre que les développeurs doivent le comprendre ~ mais comme un excellent moyen. Tester et clarifier les principes nous permettra de mieux comprendre les causes des bugs~ Bon, sans plus attendre, entrons dans le vif du sujet~
Cours recommandés : Tutoriel MySQL
Comment comprendre l'injection SQL (attaque) ?
L'injection SQL est une technique d'attaque qui ajoute du code SQL aux paramètres d'entrée et le transmet au serveur pour analyse et exécution.
Les attaques par injection SQL sont des cas où les paramètres d'entrée ne sont pas filtrés, puis directement intégrés à l'instruction SQL pour analyse, et l'exécution atteint un comportement inattendu, appelé attaque par injection SQL.
Principe d'attaque par injection SQL :
Une attaque par injection SQL se produit lorsqu'une application utilise le contenu d'entrée pour construire des instructions SQL dynamiques pour accéder à la base de données. L'injection SQL peut également se produire si le code utilise des procédures stockées transmises sous forme de chaînes contenant une entrée utilisateur non filtrée. L'injection SQL pourrait permettre à un attaquant d'utiliser la connexion à l'application pour exécuter des commandes dans la base de données.
Ce problème peut devenir grave si l'application utilise un compte surprivilégié pour se connecter à la base de données. Dans certains formulaires, le contenu saisi par l'utilisateur est directement utilisé pour construire des commandes SQL dynamiques, ou est utilisé comme paramètres d'entrée pour des procédures stockées. Ces formulaires sont particulièrement vulnérables aux attaques par injection SQL. Lorsque de nombreux programmes de sites Web sont écrits, la légalité des entrées de l'utilisateur n'est pas jugée ou les variables du programme ne sont pas gérées correctement, ce qui entraîne des risques de sécurité dans l'application. De cette façon, l'utilisateur peut soumettre un code de requête de base de données et obtenir des informations sensibles ou contrôler l'ensemble du serveur en fonction des résultats renvoyés par le programme, de sorte qu'une injection SQL se produit.
L'injection SQL est accessible à partir du port WWW normal et, en apparence, elle ne semble pas différente de l'accès aux pages Web ordinaires, de sorte que les pare-feu actuellement sur le marché n'émettent pas d'alerte pour l'injection SQL si l'administrateur le fait. ne vérifiez pas le journal IIS. Les habitudes peuvent être envahies sans être remarquées pendant une longue période. Cependant, la méthode d'injection SQL est assez flexible. Vous rencontrerez de nombreuses situations inattendues lors de l'injection et vous devrez construire des instructions SQL intelligentes pour réussir à obtenir les données souhaitées.
Comment se déroule l'injection SQL ?
1. Crackez la base de données backend Il s'agit de la méthode la plus couramment utilisée pour voler des informations sensibles sur un site Web.
2. L'injection peut utiliser la procédure stockée de la base de données pour effectuer une élévation de privilèges et d'autres opérations
3. L'attaquant utilise les paramètres d'entrée envoyés au serveur SQL pour construire du code SQL exécutable (peut être ajouté à la requête get, à la requête de publication, aux informations d'en-tête http, au cookie)
Comment mener une attaque par injection SQL ?
Prenez le langage de programmation PHP et la base de données MySQL comme exemples pour présenter les compétences de construction et les méthodes de construction des attaques par injection SQL
1 Injection numérique
Dans le navigateur. adresse Entrez la colonne : learn.me/sql/article.php?id=1. Il s'agit d'une interface get. L'envoi de cette requête équivaut à appeler une instruction de requête :
$sql = "SELECT * FROM article WHERE id =",$id
Dans des circonstances normales, un id=. doit être retourné. 1 article information. Ensuite, si vous saisissez : learn.me/sql/article.php?id=-1 OR 1 =1 dans la barre d'adresse du navigateur, il s'agit d'une attaque par injection SQL et peut renvoyer des informations pertinentes sur tous les articles. Pourquoi cela se produit-il ?
C'est parce que id = -1 est toujours faux, 1=1 est toujours vrai, et toutes les instructions Where sont toujours vraies, donc la condition Where équivaut à ne pas ajouter la condition Where, puis la requête le résultat est équivalent à l'intégralité du contenu du tableau
2. Injection de chaîne
Il existe un tel scénario de connexion utilisateur : l'interface de connexion comprend des zones de saisie du nom d'utilisateur et du mot de passe, ainsi qu'un bouton de soumission. Entrez le nom d'utilisateur et le mot de passe et soumettez.
Il s'agit d'une demande de publication. Lors de la connexion, appelez l'interface learn.me/sql/login.html, connectez-vous d'abord à la base de données, puis effectuez une vérification des paramètres sur le nom d'utilisateur et le mot de passe portés dans la publication. demander les paramètres en arrière-plan, c'est-à-dire le processus de requête SQL. Supposons que le nom d'utilisateur et le mot de passe corrects soient user et pwd123. Entrez le nom d'utilisateur et le mot de passe corrects et soumettez, ce qui équivaut à appeler l'instruction SQL suivante :
SELECT * FROM user WHERE username = 'user' ADN password = 'pwd123'
Puisque le nom d'utilisateur et le mot de passe sont tous deux des chaînes, la méthode d'injection SQL est La donnée portée par le paramètre devient une chaîne annotée dans mysql. Il existe 2 méthodes de commentaire dans MySQL :
1) '#' : Toutes les chaînes après '#' seront traitées comme des commentaires
Saisie du nom d'utilisateur : user'# (single Fermez le guillemet simple à gauche de l'utilisateur), entrez le mot de passe que vous souhaitez, tel que : 111, puis cliquez sur le bouton Soumettre. Equivalent à l'instruction SQL :
SELECT * FROM user WHERE username = 'user'#'ADN password = '111'
'#' est commenté, équivalent à :
SELECT * FROM user WHERE username = 'user'
2) '-- ' (il y a un espace après --) : '- - ' Les chaînes suivantes seront traitées comme des commentaires
Saisie du nom d'utilisateur : user'-- (notez qu'il y a un espace après - et un guillemet simple ferme le guillemet simple à gauche de l'utilisateur. Entrez le mot de passe comme). que vous aimez, comme :111 et cliquez sur le bouton Soumettre. Équivalent à l'instruction SQL :
SELECT * FROM user WHERE username = 'user'-- 'AND password = '111' SELECT * FROM user WHERE username = 'user'-- 'AND password = '1111'
'-- ' est commentée, équivalent à :
SELECT * FROM user WHERE username = 'user'
因此,以上两种情况可能输入一个错误的密码或者不输入密码就可登录用户名为'user'的账号,这是十分危险的事情。
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!