In MySQL bezieht sich Fehlerinjektion auf das Erstellen geeigneter Anweisungen, um die gewünschten Daten über die auf der Seite gemeldeten Fehlerinformationen zu erhalten. Wenn das Anwendungssystem die Datenbankfehlerfunktion nicht schließt, können Sie die Funktion extractvalue () verwenden, um die Informationen zurückzugeben im Ziel-XML enthalten. Die Zeichenfolge des Abfragewerts.
Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.
Die Fehlerinjektion kann auch als eine Art blinde Injektion bezeichnet werden. Erstellen Sie die Nutzlast so, dass die Informationen durch die Fehleraufforderung wiedergegeben werden. Sie können die Fehlerinjektion in Betracht ziehen, wenn eine gemeinsame Abfrage die offensichtliche Position nicht offenbaren kann.
Wie entsteht also die Fehlerinjektion?
Erstens hat das Anwendungssystem die Datenbankfehlerberichtsfunktion nicht geschlossen. Bei einigen SQL-Anweisungsfehlern wird dies direkt auf der Seite angezeigt, und einige geben sogar den Datenbanknamen und den Tabellennamen direkt preis Es ist wichtig, dass der Hintergrund nicht auf MySQL reagiert.
2. Häufig verwendete Funktionen für die Fehlerberichterstattung
EXTRACTVALUE (XML_document, XPath_string) : Der erste Parameter: XML_document ist im String-Format, das ist der Name des XML-Dokumentobjekts; der zweite Parameter: und extractvalue(1,concat(0x7e,(select @@version) ,0x7e))--+. Unter diesen ist concat der Parameter in concatenation () und 0x7e ist das ~-Symbol nach der Dekodierung. --+ ist das Kommentarzeichen. Kommentieren Sie alle nachfolgenden Anweisungen im Quellcode aus, um Fehler zu vermeiden. Nach dem Test sind die Ergebnisse wie folgt:
//Die 1 vor concat ist der erste Parameter der Funktion extractvalue(), der durch eine beliebige Zahl ersetzt werden kann
2. Datenbanknamen abrufen
Anweisungen verwenden
1‘ and extractvalue(1,concat(0x7e,(select database()),0x7e))--+,
3. Tabellennamen abrufen
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. Daten abrufen
1' and extractvalue(1,concat(0x7e,(select * from (select username from users limit 0,1) as a),0x7e))--+. 修改其中的limit参数即可获取users表中的不同行内容
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonWas ist MySQL-Fehlerinjektion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!