MySQL injection
RootedCON ist die relevanteste Cybersicherheitsveranstaltung in Spanien und eine der wichtigsten in Europa. Mit dem Ziel, technisches Wissen zu fördern, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersicherheitsfachleute in jeder Disziplin.
Kommentare
Interessante Funktionen
Mysql bestätigen:
Nützliche Funktionen
The following functions can be useful when performing MySQL injection attacks:
Die folgenden Funktionen können nützlich sein, wenn Sie MySQL-Injektionsangriffe durchführen:
version()
: This function returns the version of the MySQL server.user()
: This function returns the current username.database()
: This function returns the name of the current database.current_user()
: This function returns the current username and host.schema()
: This function returns the name of the current database.@@hostname
: This variable returns the hostname of the MySQL server.@@datadir
: This variable returns the data directory of the MySQL server.@@basedir
: This variable returns the base directory of the MySQL server.@@version_compile_os
: This variable returns the operating system on which the MySQL server is compiled.@@version
: This variable returns the version of the MySQL server.@@global.version_compile_os
: This variable returns the operating system on which the MySQL server is compiled.@@global.version
: This variable returns the version of the MySQL server.@@global.datadir
: This variable returns the data directory of the MySQL server.@@global.basedir
: This variable returns the base directory of the MySQL server.@@global.hostname
: This variable returns the hostname of the MySQL server.@@global.collation_server
: This variable returns the collation used by the MySQL server.@@global.character_set_server
: This variable returns the character set used by the MySQL server.@@global.character_set_database
: This variable returns the character set used by the current database.@@global.character_set_connection
: This variable returns the character set used by the current connection.@@global.character_set_results
: This variable returns the character set used for returning query results.@@global.character_set_client
: This variable returns the character set used by the client.@@global.character_set_filesystem
: This variable returns the character set used by the file system.@@global.character_set_system
: This variable returns the character set used by the system.@@global.character_set_server
: This variable returns the character set used by the server.@@global.character_set_database
: This variable returns the character set used by the database.@@global.character_set_connection
: This variable returns the character set used by the connection.@@global.character_set_results
: This variable returns the character set used for query results.@@global.character_set_client
: This variable returns the character set used by the client.@@global.character_set_filesystem
: This variable returns the character set used by the file system.@@global.character_set_system
: This variable returns the character set used by the system.@@global.collation_server
: This variable returns the collation used by the server.@@global.collation_database
: This variable returns the collation used by the database.@@global.collation_connection
: This variable returns the collation used by the connection.@@global.collation_results
: This variable returns the collation used for query results.@@global.collation_client
: This variable returns the collation used by the client.@@global.collation_filesystem
: This variable returns the collation used by the file system.@@global.collation_system
: This variable returns the collation used by the system.@@global.collation_server
: This variable returns the collation used by the server.@@global.collation_database
: This variable returns the collation used by the database.@@global.collation_connection
: This variable returns the collation used by the connection.@@global.collation_results
: This variable returns the collation used for query results.@@global.collation_client
: This variable returns the collation used by the client.@@global.collation_filesystem
: This variable returns the collation used by the file system.@@global.collation_system
: This variable returns the collation used by the system.
Alle Injektionen
Injektionen sind eine der häufigsten Sicherheitslücken in Webanwendungen. Sie treten auf, wenn nicht vertrauenswürdige Daten in eine Anfrage oder Abfrage eingefügt werden, wodurch ein Angreifer schädlichen Code ausführen kann. In diesem Abschnitt werden verschiedene Arten von Injektionen behandelt, die bei MySQL-Datenbanken auftreten können.
SQL-Injektion
Bei einer SQL-Injektion kann ein Angreifer schädlichen SQL-Code in eine Anfrage einschleusen, um unerwünschte Aktionen auszuführen. Dies kann dazu führen, dass Datenbanken kompromittiert, Informationen gestohlen oder sogar die gesamte Anwendung übernommen wird.
Fehlerbasierte SQL-Injektion
Bei einer fehlerbasierten SQL-Injektion nutzt ein Angreifer Fehlermeldungen der Datenbank aus, um Informationen über die Datenbankstruktur zu erhalten. Durch das gezielte Auslösen von Fehlern kann der Angreifer sensible Informationen wie Tabellennamen, Spaltennamen oder sogar Daten aus der Datenbank extrahieren.
Union-basierte SQL-Injektion
Bei einer union-basierten SQL-Injektion nutzt ein Angreifer die UNION-Abfrage in SQL aus, um Daten aus einer anderen Tabelle abzurufen. Durch das Hinzufügen von UNION-Abfragen kann der Angreifer Daten aus einer anderen Tabelle in die ursprüngliche Abfrage einfügen und so vertrauliche Informationen erhalten.
Time-based SQL-Injektion
Bei einer time-based SQL-Injektion nutzt ein Angreifer die Verzögerungsfunktionen der Datenbank aus, um Informationen zu extrahieren. Durch das Hinzufügen von Verzögerungen in der SQL-Abfrage kann der Angreifer feststellen, ob bestimmte Bedingungen erfüllt sind oder nicht, und so schrittweise Informationen über die Datenbank erhalten.
Blind SQL-Injektion
Bei einer Blind SQL-Injektion kann ein Angreifer keine direkten Fehlermeldungen oder Informationen aus der Datenbank erhalten. Stattdessen nutzt der Angreifer logische Bedingungen und Zeitverzögerungen, um schrittweise Informationen zu extrahieren. Dies erfordert oft Geduld und Ausdauer, kann aber dennoch zu erfolgreichen Angriffen führen.
Weitere Injektionen
Neben SQL-Injektionen gibt es auch andere Arten von Injektionen, die bei Webanwendungen auftreten können. Hier sind einige Beispiele:
OS-Injektion
Bei einer OS-Injektion kann ein Angreifer schädlichen Code in das Betriebssystem einschleusen. Dies kann dazu führen, dass der Angreifer Befehle auf dem Server ausführt, Dateien liest oder schreibt oder sogar das gesamte System übernimmt.
LDAP-Injektion
Bei einer LDAP-Injektion kann ein Angreifer schädlichen Code in eine LDAP-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einem LDAP-Verzeichnis.
XML-Injektion
Bei einer XML-Injektion kann ein Angreifer schädlichen Code in eine XML-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer XML-Datei.
XPath-Injektion
Bei einer XPath-Injektion kann ein Angreifer schädlichen Code in eine XPath-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer XML-Datei, die XPath verwendet.
Command Injection
Bei einer Command Injection kann ein Angreifer schädlichen Code in eine Befehlszeile einschleusen. Dadurch kann der Angreifer Befehle auf dem Server ausführen und unerwünschte Aktionen durchführen.
Code Injection
Bei einer Code Injection kann ein Angreifer schädlichen Code in eine Anwendung einschleusen. Dadurch kann der Angreifer die Kontrolle über die Anwendung übernehmen und unerwünschte Aktionen ausführen.
Server-Side Template Injection (SSTI)
Bei einer Server-Side Template Injection kann ein Angreifer schädlichen Code in ein Serverseitiges Template einschleusen. Dadurch kann der Angreifer die Kontrolle über das Template übernehmen und unerwünschte Aktionen ausführen.
Client-Side Template Injection (CSTI)
Bei einer Client-Side Template Injection kann ein Angreifer schädlichen Code in ein Clientseitiges Template einschleusen. Dadurch kann der Angreifer die Kontrolle über das Template übernehmen und unerwünschte Aktionen ausführen.
Expression Language Injection (EL Injection)
Bei einer Expression Language Injection kann ein Angreifer schädlichen Code in eine Expression Language-Anweisung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer Webanwendung.
JavaScript Injection
Bei einer JavaScript-Injektion kann ein Angreifer schädlichen JavaScript-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in der Anwendung oder das Umleiten des Benutzers auf eine bösartige Website.
HTML Injection
Bei einer HTML-Injektion kann ein Angreifer schädlichen HTML-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Anzeigen von gefälschten Formularen oder das Umleiten des Benutzers auf eine bösartige Website.
CSS Injection
Bei einer CSS-Injektion kann ein Angreifer schädlichen CSS-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer das Aussehen der Anwendung ändern oder unerwünschte Aktionen ausführen, wie z.B. das Auslesen von Daten über Hintergrundbilder.
Server-Side Request Forgery (SSRF)
Bei einer Server-Side Request Forgery kann ein Angreifer die Anwendung dazu bringen, Anfragen an andere interne oder externe Ressourcen zu senden. Dadurch kann der Angreifer Informationen aus internen Netzwerken abrufen oder Angriffe auf externe Ressourcen durchführen.
Remote File Inclusion (RFI)
Bei einer Remote File Inclusion kann ein Angreifer schädlichen Code von einer externen Quelle in eine Anwendung einschleusen. Dadurch kann der Angreifer die Kontrolle über die Anwendung übernehmen und unerwünschte Aktionen ausführen.
Local File Inclusion (LFI)
Bei einer Local File Inclusion kann ein Angreifer lokale Dateien in eine Anwendung einschleusen. Dadurch kann der Angreifer vertrauliche Informationen auslesen oder sogar das gesamte System kompromittieren.
Path Traversal
Bei einem Path Traversal-Angriff kann ein Angreifer Dateien oder Verzeichnisse außerhalb des vorgesehenen Pfades einer Anwendung abrufen. Dadurch kann der Angreifer auf vertrauliche Informationen zugreifen oder sogar das gesamte System kompromittieren.
LDAP Injection
Bei einer LDAP-Injektion kann ein Angreifer schädlichen Code in eine LDAP-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einem LDAP-Verzeichnis.
XPath Injection
Bei einer XPath-Injektion kann ein Angreifer schädlichen Code in eine XPath-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer XML-Datei, die XPath verwendet.
XXE (XML External Entity) Injection
Bei einer XXE-Injektion kann ein Angreifer schädlichen Code in eine XML-Anfrage einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer XML-Datei oder das Ausführen von Remote-Code.
Server-Side Template Injection (SSTI)
Bei einer Server-Side Template Injection kann ein Angreifer schädlichen Code in ein Serverseitiges Template einschleusen. Dadurch kann der Angreifer die Kontrolle über das Template übernehmen und unerwünschte Aktionen ausführen.
Client-Side Template Injection (CSTI)
Bei einer Client-Side Template Injection kann ein Angreifer schädlichen Code in ein Clientseitiges Template einschleusen. Dadurch kann der Angreifer die Kontrolle über das Template übernehmen und unerwünschte Aktionen ausführen.
Expression Language Injection (EL Injection)
Bei einer Expression Language Injection kann ein Angreifer schädlichen Code in eine Expression Language-Anweisung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in einer Webanwendung.
JavaScript Injection
Bei einer JavaScript-Injektion kann ein Angreifer schädlichen JavaScript-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Auslesen oder Ändern von Daten in der Anwendung oder das Umleiten des Benutzers auf eine bösartige Website.
HTML Injection
Bei einer HTML-Injektion kann ein Angreifer schädlichen HTML-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer unerwünschte Aktionen ausführen, wie z.B. das Anzeigen von gefälschten Formularen oder das Umleiten des Benutzers auf eine bösartige Website.
CSS Injection
Bei einer CSS-Injektion kann ein Angreifer schädlichen CSS-Code in eine Webanwendung einschleusen. Dadurch kann der Angreifer das Aussehen der Anwendung ändern oder unerwünschte Aktionen ausführen, wie z.B. das Auslesen von Daten über Hintergrundbilder.
Server-Side Request Forgery (SSRF)
Bei einer Server-Side Request Forgery kann ein Angreifer die Anwendung dazu bringen, Anfragen an andere interne oder externe Ressourcen zu senden. Dadurch kann der Angreifer Informationen aus internen Netzwerken abrufen oder Angriffe auf externe Ressourcen durchführen.
Remote File Inclusion (RFI)
Bei einer Remote File Inclusion kann ein Angreifer schädlichen Code von einer externen Quelle in eine Anwendung einschleusen. Dadurch kann der Angreifer die Kontrolle über die Anwendung übernehmen und unerwünschte Aktionen ausführen.
Local File Inclusion (LFI)
Bei einer Local File Inclusion kann ein Angreifer lokale Dateien in eine Anwendung einschleusen. Dadurch kann der Angreifer vertrauliche Informationen auslesen oder sogar das gesamte System kompromittieren.
Path Traversal
Bei einem Path Traversal-Angriff kann ein Angreifer Dateien oder Verzeichnisse außerhalb des vorgesehenen Pfades einer Anwendung abrufen. Dadurch kann der Angreifer auf vertrauliche Informationen zugreifen oder sogar das gesamte System kompromittieren.
von https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/
Ablauf
Denken Sie daran, dass Sie in "modernen" Versionen von MySQL "information_schema.tables" durch "mysql.innodb_table_stats" ersetzen können (Dies könnte nützlich sein, um WAFs zu umgehen).
Nur 1 Wert
group_concat()
Limit X,1
Blind einer nach dem anderen
substr(version(),X,1)='r'
odersubstring(version(),X,1)=0x70
oderascii(substr(version(),X,1))=112
mid(version(),X,1)='5'
Blind hinzufügen
LPAD(version(),1...lenght(version()),'1')='asd'...
RPAD(version(),1...lenght(version()),'1')='asd'...
SELECT RIGHT(version(),1...lenght(version()))='asd'...
SELECT LEFT(version(),1...lenght(version()))='asd'...
SELECT INSTR('foobarbar', 'fo...')=1
Anzahl der Spalten erkennen
Mit einer einfachen ORDER
MySQL Union-basiert
Die Union-basierte SQL-Injection ist eine Technik, bei der die UNION-Abfrage verwendet wird, um Daten aus einer anderen Tabelle abzurufen. Dieser Angriff erfolgt normalerweise über Eingabeformulare oder URL-Parameter, bei denen die Benutzereingabe nicht ordnungsgemäß validiert oder bereinigt wird.
Union-basierte SQL-Injection erkennen
Um eine Union-basierte SQL-Injection zu erkennen, können Sie versuchen, die Anzahl der Spalten in der SELECT-Anweisung zu ermitteln. Sie können dies tun, indem Sie eine UNION-Abfrage mit einer anderen SELECT-Anweisung kombinieren und die Anzahl der zurückgegebenen Spalten überprüfen. Wenn die Anzahl der Spalten übereinstimmt, besteht möglicherweise eine SQL-Injection.
Union-basierte SQL-Injection ausnutzen
Um eine Union-basierte SQL-Injection auszunutzen, müssen Sie die Anzahl der Spalten in der SELECT-Anweisung ermitteln und dann die Daten aus einer anderen Tabelle abrufen. Sie können dies tun, indem Sie die UNION-Abfrage verwenden und die erforderlichen Spaltennamen und Tabellennamen angeben.
Beispiel
Angenommen, wir haben eine URL-Parameter id
, der in einer SQL-Abfrage verwendet wird:
Wir können versuchen, eine Union-basierte SQL-Injection auszuführen, indem wir die Anzahl der Spalten ermitteln:
Wenn die Anzahl der Spalten übereinstimmt, können wir die Daten aus einer anderen Tabelle abrufen:
Schutzmaßnahmen
Um Union-basierte SQL-Injections zu verhindern, sollten Sie immer eine ordnungsgemäße Validierung und Bereinigung der Benutzereingaben durchführen. Verwenden Sie Parameterisierte Abfragen oder Prepared Statements, um sicherzustellen, dass die Benutzereingaben nicht direkt in die SQL-Abfrage eingefügt werden.
Weitere Ressourcen
SSRF
Hier erfahren Sie verschiedene Möglichkeiten, wie Sie eine Mysql-Injektion missbrauchen können, um eine SSRF zu erhalten. Hier** finden Sie weitere Informationen dazu.**
WAF-Bypass-Tricks
Alternativen zu Information_schema
Denken Sie daran, dass Sie in "modernen" Versionen von MySQL information_schema.tables durch mysql.innodb_table_stats oder durch sys.x$schema_flattened_keys oder durch sys.schema_table_statistics ersetzen können.
MySQL-Injektion ohne Kommas
Wählen Sie 2 Spalten aus, ohne ein Komma zu verwenden (https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma):
Abrufen von Werten ohne Spaltennamen
Wenn Sie zu einem bestimmten Zeitpunkt den Namen der Tabelle kennen, aber nicht den Namen der Spalten in der Tabelle, können Sie versuchen herauszufinden, wie viele Spalten es gibt, indem Sie etwas Ähnliches ausführen:
Angenommen, es gibt 2 Spalten (wobei die erste die ID ist) und die andere die Flagge ist, können Sie versuchen, den Inhalt der Flagge durch Brute-Force zu ermitteln, indem Sie Zeichen für Zeichen ausprobieren:
Mehr Informationen finden Sie unter https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952
MySQL Geschichte
Sie können andere Ausführungen innerhalb von MySQL sehen, indem Sie die Tabelle sys.x$statement_analysis lesen.
Alternative Versionen
Weitere MYSQL-Injektionsanleitungen
Referenzen
RootedCON ist die relevanteste Cybersicherheitsveranstaltung in Spanien und eine der wichtigsten in Europa. Mit der Mission, technisches Wissen zu fördern, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersicherheitsprofis in jeder Disziplin.
Last updated