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.
L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.
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
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
1‘ and extractvalue(1,concat(0x7e,(select database()),0x7e))--+,
1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))--+. 其中group_concat将tale_name字段的所有行放在一行上显示出来,如下所示
1' and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))--+. 修改其中的limit参数即可获取users表中的不同行内容
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!