/ / Qu'est-ce que l'injection SQL?

Qu'est-ce que l'injection SQL?

Le nombre de sites et de pages sur le Web est régulièrementcroissance. Tous ceux qui peuvent le faire sont absorbés par le développement. Et les futurs programmeurs Web utilisent très souvent du code ancien et dangereux. Cela crée de nombreuses failles pour les attaquants et les pirates. Ce qu'ils utilisent. L'une des vulnérabilités les plus classiques est l'injection SQL.

Un peu de théorie

Beaucoup de gens savent que la plupart des sites et servicesles réseaux sont utilisés pour stocker les bases de données SQL. C'est un langage de requête structuré qui vous permet de gérer et d'administrer des magasins de données. De nombreuses versions différentes de systèmes de gestion de bases de données sont connues - Oracle, MySQL, Postgre. Quels que soient le nom et le type, ils utilisent les requêtes de données de la même manière. C'est là que réside la vulnérabilité potentielle. Si le développeur n'a pas été en mesure de traiter la demande correctement et en toute sécurité, l'attaquant peut en profiter et appliquer des tactiques spéciales pour accéder à la base de données et, de là, contrôler l'ensemble du site.

injection SQL

Pour éviter de telles situations, vous devez optimiser correctement le code et surveiller attentivement quelle demande est traitée et de quelle manière.

Vérification de l'injection SQL

Pour déterminer si une vulnérabilité réseau existeil existe de nombreux systèmes logiciels automatisés prêts à l'emploi. Mais vous pouvez également effectuer un contrôle simple manuellement. Pour ce faire, rendez-vous sur l'un des sites à l'étude et essayez de provoquer une erreur de base de données dans la barre d'adresse. Par exemple, un script sur un site Web peut ne pas traiter les demandes et ne pas les réduire.

Par exemple, y a-t-il some_site / index.php? Id = 25

Le moyen le plus simple est de mettre un devis après 25et envoyez une demande. Si aucune erreur ne se produit, alors soit toutes les demandes sont filtrées sur le site et traitées correctement, soit leur sortie est désactivée dans les paramètres. Si la page s'est rechargée avec des problèmes, il existe une vulnérabilité pour l'injection SQL.

Une fois qu'il est trouvé, vous pouvez essayer de vous en débarrasser.

Pour implémenter cette vulnérabilité, vous devez savoirun peu sur les commandes de requête SQL. L'un d'eux est UNION. Il combine plusieurs résultats de requête en un seul. C'est ainsi que vous pouvez calculer le nombre de champs dans le tableau. Un exemple de la première requête ressemble à ceci:

  • some_site / index.php? id = 25 UNION SELECT 1.

Dans la plupart des cas, une telle entrée devrait donner une erreur. Cela signifie que le nombre de champs n'est pas égal à 1. Ainsi, en sélectionnant des options parmi 1 ou plus, vous pouvez définir leur nombre exact:

  • some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

Autrement dit, lorsque l'erreur cesse d'apparaître, le nombre de champs est deviné.

Il existe également une solution alternative à celaProblèmes. Par exemple, lorsque le nombre de champs est grand - 30, 60 ou 100. Il s'agit d'une commande GROUP BY. Il regroupe les résultats de la requête par un attribut, par exemple, id:

  • some_site / index.php? id = 25 GROUP BY 5.

Si aucune erreur n'a été reçue, alors il y a plus de 5 champs. Ainsi, en remplaçant les options d'une gamme assez large, vous pouvez calculer combien il y en a réellement.

Cet exemple d'injection SQL est destiné aux débutants qui souhaitent s'essayer au test de leur site. Il est important de se rappeler qu'il existe un article du Code criminel pour l'accès non autorisé à quelqu'un d'autre.

Types d'injection de base

Il existe plusieurs façons d'implémenter des vulnérabilités via l'injection SQL. Voici les techniques les plus populaires:

  • Injection SQL de requête UNION. Un exemple simple de ce type a déjà été discuté ci-dessus. Il est mis en œuvre en raison d'une erreur dans la vérification des données entrantes, qui n'est en aucun cas filtrée.

  • Injection SQL basée sur des erreurs.Comme son nom l'indique, ce type exploite également les erreurs en envoyant des expressions syntaxiquement incorrectes. Ensuite, les en-têtes de réponse sont interceptés, analysant lesquels, vous pouvez ensuite effectuer une injection SQL.

  • Requêtes empilées injection SQL.La vulnérabilité est identifiée en exécutant des requêtes séquentielles. Il est caractérisé par l'ajout à la fin du signe ";". Cette approche est plus souvent utilisée pour accéder à l'implémentation de la lecture et de l'écriture de données, ou au contrôle des fonctions du système d'exploitation, si les privilèges le permettent.

Systèmes logiciels pour rechercher les vulnérabilités SQL

Disponible pour l'injection SQL,les programmes ont généralement deux composants: analyser un site pour détecter d'éventuelles vulnérabilités et les utiliser pour accéder aux données. Il existe de tels utilitaires pour presque toutes les plates-formes connues. Leur fonctionnalité facilite grandement la vérification du site pour la possibilité de craquage par injection SQL.

Sqlmap

Un scanner très puissant qui fonctionne avec la plupartSGBD connu. Prend en charge diverses techniques d'injection SQL. A la capacité de reconnaître automatiquement le type de hachage de mot de passe et son craquage de dictionnaire. Il existe également la fonctionnalité de téléchargement et de téléchargement de fichiers à partir du serveur.

 injection SQL

L'installation dans un environnement Linux est effectuée à l'aide des commandes:

  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py - assistant.

 vérifier l'injection SQL

Pour Windows, il existe à la fois une ligne de commande et une interface utilisateur graphique.

injection jSQL

jSQL Injection est un outil multiplateformepour tester l'exploitation des vulnérabilités SQL. Il est écrit en Java, le JRE doit donc être installé sur le système. Capable de gérer GET, POST, en-tête, les demandes de cookies. Il dispose d'une interface graphique conviviale.

L'installation de ce progiciel est la suivante:

wget https://github.com/`curl -s https: // github.com / ron190 / jsql-injection / releases | grep-E -o "/ ron190 / jsql-injection / releases / download / v [0-9] [0-9] [0-9] [0-9] [0-9] {1,2}. [0-9] {1,2} .jar "| tête-n 1 »

piratage d'injection SQL

Il peut être lancé à l'aide de la commande java -jar ./jsql-injection-v*.jar

Pour commencer à vérifier le site pourVulnérabilité SQL, vous devez saisir son adresse dans le champ supérieur. Ils sont séparés pour GET et POST. Si le résultat est positif, une liste des tables disponibles apparaîtra dans la fenêtre de gauche. Vous pouvez les consulter et découvrir des informations confidentielles.

Pour rechercher les panneaux administratifs, utilisezOnglet "Page d'administration". Il utilise des modèles spéciaux pour rechercher automatiquement les enregistrements système des utilisateurs privilégiés. D'eux, vous pouvez obtenir juste un hachage du mot de passe. Mais il est également disponible dans la boîte à outils du programme.

comment faire une injection SQL

Après avoir trouvé toutes les vulnérabilités et injecté les requêtes nécessaires, l'utilitaire vous permettra de télécharger votre fichier sur le serveur ou, au contraire, de le télécharger à partir de là.

SQLi Dumper v.7

Ce programme est facile à utiliserun outil pour trouver et implémenter des vulnérabilités dans SQL. L'ONU produit cela sur la base des soi-disant dorks. Vous pouvez en trouver des listes sur Internet. Les portes d'injection SQL sont des modèles de requête de recherche spéciaux. Avec leur aide, vous pouvez trouver un site potentiellement vulnérable via n'importe quel moteur de recherche.

Outils de formation

Sur le site itsecgames.com dispose d'un ensemble d'outils spécial qui vous permet de montrer comment faire une injection SQL et de la tester par exemple. Pour l'utiliser, vous devez le télécharger et l'installer. L'archive contient un ensemble de fichiers qui représentent la structure du site. Pour l'installer, vous aurez besoin d'un ensemble de serveurs Web Apache, MySQL et PHP sur le système.

protection php d'injection SQL

Après avoir décompressé l'archive dans le dossier du serveur Web, vous devezaccédez à l'adresse saisie lors de l'installation de ce logiciel. La page d'enregistrement de l'utilisateur s'ouvre. Ici, vous devez entrer vos données et cliquer sur "Créer". Après avoir transféré l'utilisateur dans une nouvelle fenêtre, le système proposera de choisir l'une des options de test. Parmi eux, il y a à la fois les injections décrites et de nombreuses autres tâches de test.

Un exemple d'injection SQL commeGET / Recherche. Ici, vous devez le sélectionner et cliquer sur "Hack". L'utilisateur sera présenté avec une barre de recherche et une imitation d'un certain site avec des films. Vous pouvez parcourir des films pendant longtemps. Mais il n'y en a que 10. Par exemple, vous pouvez essayer d'entrer dans Iron Man. Un film sera affiché, ce qui signifie que le site fonctionne et qu'il contient des tableaux. Nous devons maintenant vérifier si le script filtre les caractères spéciaux, en particulier les guillemets. Pour ce faire, ajoutez "" à la barre d'adresse. De plus, vous devez le faire après le titre du film. Le site donnera une erreur Erreur: vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de "%" "à la ligne 1, qui indique que les caractères ne sont toujours pas traités correctement. Ainsi, vous pouvez essayer de remplacer votre demande. Mais vous devez d'abord calculer le nombre de champs. Pour ce faire, utilisez order by, qui est entré après le devis: http://testsites.com/sqli_1.php?title=Iron+Man "order by 2 - & action = search.

Cette commande affichera simplement des informations sur le film,autrement dit, le nombre de champs est supérieur à 2. Le double trait d'union indique au serveur de rejeter le reste des requêtes. Nous devons maintenant répéter, en remplaçant toutes les grandes valeurs jusqu'à ce qu'une erreur s'affiche. En conséquence, il s'avère qu'il y aura 7 champs.

exemple d'injection SQL

Il est maintenant temps d'obtenir quelque chose d'utilebase. Nous devrons modifier légèrement la requête dans la barre d'adresse, en l'amenant sous cette forme: http://testsites.com/sqli_1.php?title=Iron+Man "union select 1, database (), user (), 4, password, 6, 7 des utilisateurs - & action = recherche. À la suite de son exécution, des lignes avec des hachages de mot de passe seront affichées, qui peuvent être facilement converties en caractères compréhensibles à l'aide de l'un des services en ligne. Et avec un peu de conjuration et de sélection du nom du champ avec un identifiant, vous pouvez accéder à l'enregistrement de quelqu'un d'autre, par exemple un administrateur de site.

Il existe des tonnes de types d'injection dans le produit sur lesquels vous pouvez vous entraîner. Il convient de rappeler que l'utilisation de ces compétences sur le Web, sur de vrais sites, peut être criminalisée.

Injection et PHP

En règle générale, c'est le code PHP qui est responsable du traitement nécessaire des requêtes provenant de l'utilisateur. C'est donc à ce niveau que vous devez construire une protection contre l'injection SQL en PHP.

Pour commencer, il convient de donner quelques recommandations simples sur la base desquelles vous devez le faire.

  • Les données doivent toujours être traitées avantplacer dans la base. Cela peut être fait soit en utilisant des expressions existantes, soit en organisant les requêtes manuellement. Ici aussi, il convient de garder à l'esprit que les valeurs numériques sont converties dans le type requis;
  • Évitez l'apparition de diverses structures de contrôle dans la requête.

Maintenant, un peu sur les règles d'écriture de requêtes dans MySQL pour se protéger contre l'injection SQL.

Il est important de séparer les données des mots-clés SQL lors de la construction des expressions de requête.

  • SELECT * FROM table WHERE nom = Zerg.

Dans cette construction, le système peut penser que Zerg est le nom d'un champ, vous devez donc le mettre entre guillemets.

  • SELECT * FROM table WHERE nom = "Zerg".

Cependant, il existe des situations où la valeur elle-même contient des guillemets.

  • SELECT * FROM table WHERE name = "Côte d'Ivoire".

Seule une partie du cat-d sera traitée ici, etle reste peut être perçu comme une commande qui, bien entendu, n'existe pas. Par conséquent, une erreur se produira. Vous devez donc filtrer ce type de données. Pour cela, une barre oblique inverse est utilisée.

  • SELECT * FROM table WHERE name = "Côte d'Ivoire".

Tout ce qui précède s'applique aux chaînes.Si l'action se déroule avec un nombre, elle n'a pas besoin de guillemets ni de barres obliques. Cependant, ils doivent être forcés au type de données requis.

Il est recommandé que le nom du champ soitdoit être enfermé dans un backtick. Ce caractère est sur le côté gauche du clavier, avec le tilde "~". Ceci afin que MySQL puisse distinguer avec précision le nom du champ de son mot-clé.

Travailler avec des données de manière dynamique

Très souvent, des requêtes générées dynamiquement sont utilisées pour obtenir des données de la base de données. Par exemple:

  • SELECT * FROM table WHERE nombre = "$ nombre".

Ici, la variable $ number est transmise comme définition de la valeur du champ. Que se passera-t-il si la Côte d'Ivoire y tombe?

Vous pouvez, bien sûr, éviter ce problèmeen activant les "guillemets magiques" dans les paramètres. Mais maintenant, les données seront examinées si nécessaire et non nécessaire. De plus, si le code est écrit à la main, vous pouvez passer un peu plus de temps à essayer de créer vous-même un système résistant au piratage.

Vous pouvez utiliser mysql_real_escape_string pour ajouter vous-même une barre oblique.

$ nombre = mysql_real_escape_string ($ nombre);

$ année = mysql_real_escape_string ($ année);

$ query = "INSERT INTO table (number, year, class) VALUES (" $ number "," $ year ", 11)".

Bien que la taille du code ait augmenté, il sera potentiellement beaucoup plus sûr.

Espaces réservés

Les espaces réservés sont une sorte de marqueurs par lesquels le système apprend qu'une fonction spéciale doit être insérée à cet endroit. Par exemple:

$ sate = $ mysqli-> prepare ("SELECT District FROM Number WHERE Name =?");

$ sate-> bind_param ("s", $ nombre);

$ sate-> execute ();

Ce morceau de code prépare le modèlequery, puis liez le numéro de variable et exécutez-le. Cette approche permet de séparer le traitement de la demande et sa mise en œuvre. Ainsi, vous pouvez vous protéger contre l'utilisation de l'injection de code malveillant dans les requêtes SQL.

Ce qu'un attaquant peut faire

La sécurité du système est un facteur très importantne peut être négligé. Bien entendu, un simple site de carte de visite sera plus facile à restaurer. Et si c'est un grand portail, service, forum? Quelles sont les conséquences si vous ne pensez pas à la sécurité?

Premièrement, un hacker peut violer à la fois l'intégritébase et supprimez-le entièrement. Et si l'administrateur du site ou l'hébergeur n'a pas fait de sauvegarde, ce sera difficile. De plus, un attaquant, ayant piraté un site, peut aller vers d'autres hébergés sur le même serveur.

Vient ensuite le vol des données personnelles des visiteurs.Comment les utiliser - tout ici n'est limité que par l'imagination du hacker. Mais dans tous les cas, les conséquences ne seront pas très agréables. Surtout s'il contenait des informations financières.

En outre, un attaquant peut vider la base de données pour lui-même, puis extorquer de l'argent pour son retour.

La désinformation des utilisateurs au nom de l'administrateur du site, qui n'est pas une personne, peut également avoir des conséquences négatives, car la fraude est possible.

Conclusion

Toutes les informations contenues dans cet article sont fournies à titre informatif uniquement. Vous devez l'utiliser uniquement pour tester vos propres projets lorsque des vulnérabilités sont découvertes et éliminées.

Pour une étude plus approfondie de la technique decomment effectuer une injection SQL, vous devez commencer par rechercher réellement les capacités et les fonctionnalités du langage SQL. Comment les requêtes sont composées, mots-clés, types de données et application de tout cela.

De plus, vous ne pouvez pas vous passer de comprendre le fonctionnement des fonctions.Éléments PHP et HTML. Les principales vulnérabilités pour l'utilisation par injection sont la barre d'adresse, la recherche et divers champs. Apprendre les fonctions PHP, comment elles sont implémentées et ce qu'elles peuvent faire vous aidera à comprendre comment vous pouvez éviter les erreurs.

Disponibilité de nombreux logiciels prêts à l'emploiLes outils permettent une analyse approfondie du site pour les vulnérabilités connues. L'un des produits les plus populaires est kali linux. Ceci est une image d'un système d'exploitation basé sur Linux, qui contient un grand nombre d'utilitaires et de programmes qui peuvent effectuer une analyse complète d'un site pour la force.

Pourquoi avez-vous besoin de savoir comment pirater un site Web?Tout est très simple - c'est nécessaire pour avoir une idée des vulnérabilités potentielles de votre projet ou site. Surtout s'il s'agit d'une boutique en ligne avec la possibilité de payer en ligne, où les données de paiement de l'utilisateur peuvent être compromises par un attaquant.

Pour la recherche professionnelle, il existeles services de sécurité de l'information pourront contrôler le site selon différents critères et profondeur. De la simple injection HTML à l'ingénierie sociale et au phishing.

J'ai aimé:
0
Messages populaires
Développement spirituel
Nourriture
yup