Fünf Verzögerungsmethoden für die MySQL-Zeitblindinjektion

Fünf Verzögerungsmethoden für die MySQL-Zeitblindinjektion

Fünf Verzögerungsmethoden für die MySQL-Zeitblindinjektion (unerwartete PWNHUB-Lösung)

Verzögerungseinspritzfunktion

Fünf: sleep(), benchmark(t,exp), kartesisches Produkt, GET_LOCK() RLIKE-Regularisierung

schlafen()

Schlaf(x)
wähle sleep(5);

benchmark() führt wiederholt einen Ausdruck aus

 Benchmark(t,exp)
     select benchmark(count,expr) dient dazu, den Ausdruck expr anzahl-mal wiederholt auszuführen, was die Verarbeitungszeit sehr lang macht und zu Verzögerungen führt.
     Wählen Sie beispielsweise „Benchmark(1000000,encode("hallo","gut"));“
     Wählen Sie Benchmark (5000000, MD5 ('Test'));​

Kartesisches Produkt

Kartesisches Produkt (weil das Verbinden von Tabellen eine zeitaufwändige Operation ist)
     AxB = die Menge, die aus allen Kombinationen von Elementen in A und B besteht, also die Verknüpfungstabelle.SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
     Wählen Sie * aus Tabellenname A, Tabellenname B
     Wählen Sie * aus Tabellenname A, Tabellenname B, Tabellenname C
     select count(*) from table_name A, table_name B, table_name C Die Tabelle kann dieselbe Tabelle sein

GET_LOCK() Sperre

GET_LOCK(key,timeout) erfordert zwei Verbindungssitzungen
RELEASE_LOCK(Schlüssel) Gibt an, ob die Sperre aufgehoben ist. Gibt 1 zurück, wenn sie aufgehoben ist.
IS_FREE_LOCK(Schlüssel) gibt die aktuelle Verbindungs-ID zurück und zeigt an, dass die Sperre mit dem Namen „xxxx“ verwendet wird.
Schlüssel ist der Name der Sperre, Timeout ist die Wartezeit für die Sperrung. Wenn die Sperre innerhalb der Zeit nicht erfolgreich erworben wird, wird das Ereignis zurückgesetzt. get_lock gibt 1 zurück, wenn die Sperre erfolgreich hinzugefügt wurde.
Diese Sperre erfolgt auf Anwendungsebene und wird zwischen verschiedenen MySQL-Sitzungen verwendet. Es handelt sich um eine Namenssperre, nicht um eine Sperre für einen bestimmten Tabellennamen oder ein bestimmtes Feld. Was gesperrt wird, hängt ganz von der Anwendung ab. Es handelt sich um eine exklusive Sperre, was bedeutet, dass der Versuch anderer Sitzungen, die Sperre zu erhalten, fehlschlägt, unabhängig davon, welche Sitzung die Sperre hält.
Sitzung A wähle get_lock('test',1);
Sitzung B wähle get_lock('test',5);
Sie können eine Tabelle angeben oder nicht. Die Sperre wird erst freigegeben, wenn die Verbindungssitzung geschlossen wird. Im Gegensatz zu Redis bleibt die Sperre jedoch bestehen, solange sie nicht aktiv freigegeben wird.
Aber nach Sitzung 1 get_lock wird es nicht freigegeben. Sitzung 2 verwendet nicht denselben Schlüssel oder verwendet kein get_lock und kann trotzdem beliebige Operationen an den Daten durchführen. Daher ist das Sperren nur ein subjektiver Wunsch, nur einer Verbindung zu erlauben, bestimmte Operationen gleichzeitig durchzuführen. Wenn andere Verbindungen nicht get_lock aufrufen, um dieselbe Sperre hinzuzufügen, sind sie davon nicht betroffen und können tun, was sie wollen.

Sitzung1

Sitzung2

get_lock: Nach dem gets_lock der Sitzung 1 wird es jedoch nicht freigegeben. Sitzung 2 sperrt nicht denselben Schlüssel oder sperrt nicht und kann trotzdem beliebige Operationen an den Daten durchführen. Daher ist das Sperren nur ein subjektiver Wunsch, nur einer Verbindung zu erlauben, bestimmte Operationen gleichzeitig durchzuführen. Wenn andere Verbindungen nicht get_lock aufrufen, um dieselbe Sperre hinzuzufügen, sind sie davon nicht betroffen und können tun, was sie wollen.

Sitzung1

Sitzung2

Analyse der Vor- und Nachteile (1) Diese Methode ist zum Aktualisieren aller Spalten effektiver, aber die Abfrageanweisung muss auch innerhalb der Sperre ausgeführt werden. (2) Diese Methode gibt die Sperre automatisch frei, wenn die Verbindung zum Client ohne Grund getrennt wird, was besser ist. Im Gegensatz zur Redis-Sperre bleibt die Sperre bestehen, wenn die Sperre nach dem Hinzufügen getrennt wird. (3) Diese Methode sperrt alle Vorgänge innerhalb der Sperre, nicht eine bestimmte Tabelle oder eine bestimmte Zeile. Daher teilen sich verschiedene Vorgänge mit demselben Schlüssel dieselbe Sperre, was zu geringer Effizienz führt. (4) Wenn die Abfrageanweisung vor der Sperre platziert wird, sind die Daten möglicherweise alt und die Aktualisierung überschreibt die Daten, die nach der Abfrage und vor der Aktualisierung von anderen Clients aktualisiert wurden.

RLIKE REGEXP reguläre Übereinstimmung

Verwenden Sie rpad oder repeat um eine lange Zeichenfolge zu erstellen und ein Muster hinzuzufügen, das viele Berechnungen erfordert. Die Verzögerungslänge kann durch den Wiederholungsparameter gesteuert werden.

Wählen Sie rpad ('a', 4999999, 'a') RLIKE concat (Wiederholung ('(a.*)+', 30), 'b');

Normale Syntax:
. : passt zu jedem einzelnen Zeichen
*: entspricht 0 oder mehr des vorherigen Zeichens
[]: passt zu jedem Zeichen in []. [ab]* kann mit einer leeren Zeichenfolge, a, b oder einer Zeichenfolge übereinstimmen, die aus einer beliebigen Anzahl von a's und b's besteht.
^: passt zum Anfang einer Zeichenfolge, z. B. passt ^s zu einer Zeichenfolge, die mit s oder S beginnt.
$: passt zum Ende, beispielsweise passt s$ zu einer Zeichenfolge, die mit s endet.
{n}: Stimmt n-mal mit dem vorherigen Zeichen überein.

RPAD(Zeichenfolge, Länge, Padzeichenfolge)

Füllen Sie str mit der rechten Maustaste mit der Zeichenfolge padstr auf, bis ihre Länge len Zeichen erreicht, und geben Sie dann str zurück. Wenn str länger als len' ist, wird es auf len Zeichen gekürzt.

mysql> SELECT RPAD('hallo',5,'?'); -> 'hallo???'

repeat(str,times) kopiert den String mal

⭐️Suche nach neuen Verzögerungsfunktionen

 concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b'

Der obige Code ist äquivalent zu sleep(5)

Damit ist dieser Artikel über fünf Verzögerungsmethoden für MySQL Time Blind Injection abgeschlossen. Weitere Informationen zu MySQL Time Blind Injection finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Eine ausführliche Zusammenfassung der Überlegungen zu MySQL-Zeiteinstellungen
  • MySql-Abfragezeitraummethode
  • MySQL-Funktion zur Berechnung der Zeitdifferenz
  • mysql erhält das gestrige Datum, das heutige Datum, das morgige Datum und die Uhrzeit der vorherigen und der nächsten Stunde
  • Automatische Aktualisierungszeit für MySQL-Zeitstempel
  • Holen Sie sich die aktuelle Systemzeit und das Datum in MySQL, um die Abfrage und Beurteilung des Codes zu erleichtern
  • Detaillierte Erläuterung der MySQL-Datumszeichenfolgen-Zeitstempelkonvertierung
  • Aktuelle Zeit in PHP MySQL einfügen

<<:  Verwenden von Textschatten- und Elementschatteneffekten in CSS

>>:  Wählen Sie die besten Voreinstellungen aus, um vollständige Kompatibilität mit allen Browsern zu erreichen.

Artikel empfehlen

Einige Parameterbeschreibungen von Texteingabefeldern im Webdesign

<br />In Gästebüchern, Foren und anderen Ort...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.17

In diesem Artikel wird die Installations- und Kon...

6 Lösungen für Netzwerkfehler im Docker-Container

6 Lösungen für Netzwerkfehler im Docker-Container...

Detaillierte Erklärung zur Verwendung von MySQL mysqldump

1. Einführung in mysqldump mysqldump ist ein logi...

MySQL 5.7.10 Installationsdokumentation Tutorial

1. Installieren Sie Abhängigkeitspakete yum -y in...

CentOS7-Bereitstellung Flask (Apache, mod_wsgi, Python36, venv)

1. Installieren Sie Apache # yum install -y httpd...

Detaillierte Einführung in TABLE-Tags (TAGS)

Grundlegende Syntax der Tabelle <table>...&l...

Zwei Möglichkeiten zum Aktivieren der Firewall im Linux-Dienst

Es gibt zwei Möglichkeiten: 1. Servicemethode Übe...

MySQL-Datenbankoperationen und Datentypen

Inhaltsverzeichnis 1. Datenbankbetrieb 1.1 Datenb...

Einfacher Webseitencode, der im NetEase-Blog verwendet wird

So verwenden Sie den Code im NetEase-Blog: Melden...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung zum horizontal scrollenden Website-Design

Horizontales Scrollen ist nicht in allen Situation...