Maison base de données tutoriel mysql Méthodes d'injection SQL courantes

Méthodes d'injection SQL courantes

May 30, 2020 am 11:28 AM
sql注入

Méthodes d'injection SQL courantes

Méthodes d'injection SQL courantes

Injection SQL pour la sécurité WEB

Introduction :

Lors du développement d'un site Web, pour des raisons de sécurité, il est nécessaire de filtrer les caractères passés depuis la page. Habituellement, les utilisateurs peuvent appeler le contenu de la base de données via les interfaces suivantes : barre d'adresse URL, interface de connexion, forum de messages, champ de recherche, etc. Cela laisse souvent des opportunités dont les pirates peuvent profiter. Au pire, les données peuvent être divulguées et, au pire, le serveur peut être arrêté.

1. Étapes d'injection SQL

a) Trouver le point d'injection et construire une instruction spéciale

Les paramètres contrôlables de l'instruction SQL entrante sont divisés en deux catégories
1. Pour les types numériques, les paramètres n'ont pas besoin d'être mis entre guillemets, tels que ?id=1
2. Pour les autres types, les paramètres doivent être mis entre guillemets, tels que ?name. ="phone"

b) L'utilisateur construit une instruction SQL (telle que : 'or 1=1#;admin'# (cette injection est également appelée mot de passe universel de PHP, qui peut contourner la saisie du mot de passe lorsque le le nom d'utilisateur est connu). Je l'expliquerai plus tard)

c) Envoyer l'instruction SQL à la base de données du SGBD

d) Le SGBD reçoit le résultat renvoyé, interprète la requête en instructions de code machine, et effectue les opérations nécessaires

e) SGBD Accepter le résultat renvoyé, le traiter et le renvoyer à l'utilisateur

Étant donné que l'utilisateur construit une instruction SQL spéciale, des résultats spéciaux doivent être renvoyés (comme tant que votre instruction SQL est suffisamment flexible)

Ci-dessous, je passe un exemple pour démontrer l'injection SQL en détail
2. Explication détaillée des exemples d'injection SQL (les tests ci-dessus supposent que magic_quote_gpc n'est pas activé sur le serveur)

1) Préparatifs préliminaires
Démontrons d'abord la vulnérabilité d'injection SQL, connectez-vous à l'interface de l'administrateur backend
Tout d'abord, créez une table de données pour les tests :

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL,
`password` varchar(64) NOT NULL,
`email` varchar(64) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
Copier après la connexion

Ajouter un enregistrement pour tester :

INSERT INTO users (username,password,email)VALUES('MarcoFly',md5('test'),'marcofly@test.com');
Copier après la connexion

Ensuite, collez le login Le code source de l'interface

<html>
 <head> 
  <title>Sql注入演示</title> 
  <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
 </head> 
 <body> 
  <form action="validate.php" method="post"> 
   <fieldset> 
    <legend>Sql注入演示</legend> 
    <table> 
     <tbody>
      <tr> 
       <td>用户名:</td>
       <td><input type="text" name="username" /></td> 
      </tr> 
      <tr> 
       <td>密 码:</td>
       <td><input type="text" name="password" /></td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="提交" /></td>
       <td><input type="reset" value="重置" /></td> 
      </tr> 
     </tbody>
    </table> 
   </fieldset> 
  </form>   
 </body>
</html>
Copier après la connexion

Ci-joint le rendu :

Méthodes dinjection SQL courantes

Lorsque l'utilisateur clique sur le bouton Soumettre, les données du formulaire seront soumises à la page validate.php, la page validate.php est utilisée pour déterminer si le nom d'utilisateur et le mot de passe saisis par l'utilisateur répondent aux exigences (ce est très importante, et c'est souvent là que se trouvent les vulnérabilités SQL)

!                                         <!--前台和后台对接-->
<html>
<head>
<title>登录验证</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<?php
$conn=@mysql_connect("localhost",&#39;root&#39;,&#39;&#39;) or die("数据库连接失败!");;
mysql_select_db("injection",$conn) or die("您要选择的数据库不存在");
$name=$_POST[&#39;username&#39;];
$pwd=$_POST[&#39;password&#39;];
$sql="select * from users where username=&#39;$name&#39; and password=&#39;$pwd&#39;";
$query=mysql_query($sql);
$arr=mysql_fetch_array($query);
if(is_array($arr)){
header("Location:manager.php");
}else{
echo "您的用户名或密码输入有误,<a href=\"Login.php\">请重新登录!</a>";
}
?>
</body>
</html>
Copier après la connexion

L'avez-vous remarqué ? Nous soumettrons directement l'utilisateur. Les données (nom d'utilisateur et mot de passe) sont directement exécutées, et le filtrage des caractères spéciaux ne l'est pas. mis en œuvre. Vous comprendrez plus tard que cela est fatal.
Analyse du code : si le nom d'utilisateur et le mot de passe correspondent avec succès, il passera à l'interface d'opération de l'administrateur (manager.php). En cas d'échec, un message d'invite convivial sera émis.
Interface pour une connexion réussie :

Méthodes dinjection SQL courantes

Invite en cas d'échec de connexion :

Méthodes dinjection SQL courantes

Jusqu'ici, le travail préliminaire a été fait. Bon, nous allons ensuite commencer notre point culminant : l'injection SQL

2) Construire l'instruction SQL
Après avoir rempli le nom d'utilisateur (marcofly) et le mot de passe (test) corrects, cliquez sur Soumettre, et il sera renvoyé vers notre interface "Bienvenue Administrateur".
Parce que le nom d'utilisateur et le mot de passe que nous avons soumis sont synthétisés dans l'instruction de requête SQL comme ceci :

select * from users where username=&#39;marcofly&#39; and password=md5(&#39;test&#39;)
Copier après la connexion


Évidemment, le nom d'utilisateur et le mot de passe sont les mêmes que ceux que nous avons donnés auparavant, vous le ferez je pourrai certainement me connecter avec succès. Mais que se passe-t-il si nous saisissons un mauvais nom d’utilisateur ou un mauvais mot de passe ? Évidemment, je ne peux absolument pas me connecter. Eh bien, c'est le cas dans des circonstances normales, mais pour les sites Web présentant des vulnérabilités d'injection SQL, tant qu'une "chaîne" spéciale est construite, vous pouvez toujours vous connecter avec succès.

Par exemple : saisissez : ' ou 1=1# dans la zone de saisie du nom d'utilisateur, saisissez le mot de passe comme vous le souhaitez, puis l'instruction de requête SQL synthétisée est :

select * from users where username=&#39;&#39; or 1=1#&#39; and password=md5(&#39;&#39;)
Copier après la connexion
Copier après la connexion


Analyse sémantique : "#" est un caractère de commentaire dans MySQL, donc le contenu après le signe dièse sera considéré comme un contenu de commentaire par MySQL, il ne sera donc pas exécuté. En d'autres termes, les deux instructions SQL suivantes. , etc. Valence :

select * from users where username=&#39;&#39; or 1=1#&#39; and password=md5(&#39;&#39;)
Copier après la connexion
Copier après la connexion

est équivalent à

select* from users where usrername=&#39;&#39; or 1=1
Copier après la connexion

car 1=1 est toujours vrai, c'est-à-dire que la clause Where est toujours vraie Après avoir simplifié davantage le SQL, etc. . Cela équivaut à l'instruction select suivante :

select * from users
Copier après la connexion

Oui, la fonction de cette instruction sql est de récupérer tous les champs de la table des utilisateurs

Ce qui précède est une méthode de saisie, en voici une autre Méthode d'injection, cette méthode est également appelée mot de passe universel de PHP

Nous pouvons nous connecter sans mot de passe si nous connaissons déjà le nom d'utilisateur Supposons que le nom d'utilisateur soit : admin

Déclaration de construction. :

select * from users where username=&#39;admin&#39;#&#39; and password=md5(&#39;&#39;)
Copier après la connexion

équivaut à

select * from users where username=&#39;admin&#39;
Copier après la connexion

, vous pouvez donc vous connecter sans saisir de mot de passe.

La base de données pensera à tort que vous pouvez vous connecter sans nom d'utilisateur, en contournant la vérification des antécédents et en atteignant l'objectif de l'injection.

exploite également des vulnérabilités dans la syntaxe SQL.

Vous voyez, une instruction SQL construite peut avoir un pouvoir destructeur si terrible. Je crois qu'après avoir vu cela, vous commencerez à avoir une compréhension rationnelle de l'injection SQL~
Oui, l'injection SQL est aussi simple que cela. Cependant, il n’est pas si simple de construire des instructions SQL flexibles en fonction de la situation réelle. Une fois que vous avez acquis les bases, vous pouvez lentement explorer par vous-même.
Avez-vous déjà pensé à ce qui se passerait si les données soumises via la fenêtre de connexion en arrière-plan étaient filtrées par l'administrateur avec des caractères spéciaux ? Dans ce cas, notre nom d'utilisateur universel' ou 1=1# ne peut pas être utilisé. Mais cela ne signifie pas que nous n’avons aucune contre-mesure. Nous devons savoir qu’il existe plusieurs façons pour les utilisateurs d’interagir avec la base de données.

Recommandé : "Tutoriel 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Connaissances de base en sécurité de Nginx : prévenir les attaques par injection SQL Connaissances de base en sécurité de Nginx : prévenir les attaques par injection SQL Jun 10, 2023 pm 12:31 PM

Nginx est un serveur Web rapide, performant et évolutif, et sa sécurité est un problème qui ne peut être ignoré dans le développement d'applications Web. Surtout les attaques par injection SQL, qui peuvent causer d’énormes dégâts aux applications Web. Dans cet article, nous verrons comment utiliser Nginx pour empêcher les attaques par injection SQL afin de protéger la sécurité des applications Web. Qu’est-ce qu’une attaque par injection SQL ? L'attaque par injection SQL est une méthode d'attaque qui exploite les vulnérabilités des applications Web. Les attaquants peuvent injecter du code malveillant dans les applications Web

Comment utiliser exp pour l'injection d'erreurs SQL Comment utiliser exp pour l'injection d'erreurs SQL May 12, 2023 am 10:16 AM

0x01 Préface Présentation L'éditeur a découvert un autre double débordement de données dans MySQL. Lorsque nous obtenons les fonctions dans MySQL, l'éditeur s'intéresse davantage aux fonctions mathématiques. Elles doivent également contenir certains types de données pour enregistrer les valeurs. L'éditeur a donc exécuté un test pour voir quelles fonctions provoqueraient des erreurs de débordement. Puis l'éditeur a découvert que lorsqu'une valeur supérieure à 709 est passée, la fonction exp() provoquera une erreur de débordement. mysql>selectexp(709);+-----------------------+|exp(709)|+---------- - -----------+|8.218407461554972

Notes de développement Laravel : méthodes et techniques pour empêcher l'injection SQL Notes de développement Laravel : méthodes et techniques pour empêcher l'injection SQL Nov 22, 2023 pm 04:56 PM

Notes de développement de Laravel : méthodes et techniques pour empêcher l'injection SQL Avec le développement d'Internet et les progrès continus de la technologie informatique, le développement d'applications Web est devenu de plus en plus courant. Au cours du processus de développement, la sécurité a toujours été une question importante que les développeurs ne peuvent ignorer. Parmi eux, la prévention des attaques par injection SQL est l’un des problèmes de sécurité qui nécessite une attention particulière lors du processus de développement. Cet article présentera plusieurs méthodes et techniques couramment utilisées dans le développement de Laravel pour aider les développeurs à prévenir efficacement l'injection SQL. Utilisation de la liaison de paramètres La liaison de paramètres est Lar

Conseils de programmation PHP : comment prévenir les attaques par injection SQL Conseils de programmation PHP : comment prévenir les attaques par injection SQL Aug 17, 2023 pm 01:49 PM

Conseils de programmation PHP : Comment prévenir les attaques par injection SQL La sécurité est cruciale lors de l'exécution d'opérations de base de données. Les attaques par injection SQL sont une attaque réseau courante qui exploite la mauvaise gestion par une application des entrées utilisateur, entraînant l'insertion et l'exécution de code SQL malveillant. Pour protéger notre application contre les attaques par injection SQL, nous devons prendre quelques précautions. Utiliser des requêtes paramétrées Les requêtes paramétrées constituent le moyen le plus simple et le plus efficace de prévenir les attaques par injection SQL. Cela fonctionne en comparant les valeurs saisies par l'utilisateur avec une requête SQL

Détection et réparation des vulnérabilités d'injection PHP SQL Détection et réparation des vulnérabilités d'injection PHP SQL Aug 08, 2023 pm 02:04 PM

Présentation de la détection et de la réparation des vulnérabilités d'injection SQL PHP : L'injection SQL fait référence à une méthode d'attaque dans laquelle les attaquants utilisent des applications Web pour injecter de manière malveillante du code SQL dans l'entrée. PHP, en tant que langage de script largement utilisé dans le développement Web, est largement utilisé pour développer des sites Web et des applications dynamiques. Cependant, en raison de la flexibilité et de la facilité d'utilisation de PHP, les développeurs ignorent souvent la sécurité, ce qui entraîne l'existence de vulnérabilités d'injection SQL. Cet article explique comment détecter et corriger les vulnérabilités d'injection SQL dans PHP et fournit des exemples de code pertinents. vérifier

Comment empêcher les attaques par injection SQL à l'aide de PHP Comment empêcher les attaques par injection SQL à l'aide de PHP Jun 24, 2023 am 10:31 AM

Dans le domaine de la sécurité des réseaux, les attaques par injection SQL sont une méthode d'attaque courante. Il exploite le code malveillant soumis par des utilisateurs malveillants pour modifier le comportement d'une application afin d'effectuer des opérations dangereuses. Les attaques par injection SQL courantes incluent les opérations de requête, les opérations d'insertion et les opérations de suppression. Parmi elles, les opérations de requête sont les plus fréquemment attaquées, et une méthode courante pour empêcher les attaques par injection SQL consiste à utiliser PHP. PHP est un langage de script côté serveur couramment utilisé dans les applications Web. PHP peut être lié à MySQL, etc.

Filtrage de formulaire PHP : prévention et filtrage des injections SQL Filtrage de formulaire PHP : prévention et filtrage des injections SQL Aug 07, 2023 pm 03:49 PM

Filtrage de formulaire PHP : prévention et filtrage des injections SQL Introduction : Avec le développement rapide d'Internet, le développement d'applications Web est devenu de plus en plus courant. Dans le développement Web, les formulaires sont l’un des moyens d’interaction les plus courants avec les utilisateurs. Cependant, il existe des risques de sécurité dans le traitement des données de soumission des formulaires. Parmi eux, l’un des risques les plus courants concerne les attaques par injection SQL. Une attaque par injection SQL est une méthode d'attaque qui utilise une application Web pour traiter de manière inappropriée les données saisies par l'utilisateur, permettant à l'attaquant d'effectuer des requêtes de base de données non autorisées. L'attaquant passe le

Stratégies pour gérer les vulnérabilités d'injection SQL dans PHP Stratégies pour gérer les vulnérabilités d'injection SQL dans PHP Aug 09, 2023 pm 03:09 PM

L'injection SQL est une méthode d'attaque réseau courante qui utilise le traitement imparfait des données d'entrée par l'application pour injecter avec succès des instructions SQL malveillantes dans la base de données. Cette méthode d'attaque est particulièrement courante dans les applications développées à l'aide du langage PHP, car la gestion par PHP des entrées utilisateur est généralement relativement faible. Cet article présentera quelques stratégies pour gérer les vulnérabilités d'injection SQL et fournira des exemples de code PHP. Utilisation d'instructions préparées Les instructions préparées constituent un moyen recommandé pour se défendre contre l'injection SQL. Il utilise des paramètres de liaison pour combiner les données d'entrée avec

See all articles