SQL Injection - Umgehen der Anmeldung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(41 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
* Security level: 0 | * Security level: 0 | ||
− | = | + | =Allgemein= |
+ | *[[SQL Injection - Übersicht]] | ||
+ | |||
+ | =Beispiel: Umgehen der Anmeldung= | ||
*Oft sind Anmeldungen datenbankbasiert. | *Oft sind Anmeldungen datenbankbasiert. | ||
*Test der Anmeldeseite auf Möglichkeiten der Informationsgewinnung. | *Test der Anmeldeseite auf Möglichkeiten der Informationsgewinnung. | ||
Zeile 10: | Zeile 13: | ||
*OWASP 2017 -> A1 Injection (SQL) -> SQLi Bypass Authentication -> Login | *OWASP 2017 -> A1 Injection (SQL) -> SQLi Bypass Authentication -> Login | ||
− | = | + | =Versuch einen Fehler zu generieren= |
*Eingabe eines einzelnen Anführungszeichens in Eingabefeld Username. | *Eingabe eines einzelnen Anführungszeichens in Eingabefeld Username. | ||
*Ein einzelnes Anführungszeichen ist bei Datenbanken ein spezielles Zeichen. | *Ein einzelnes Anführungszeichen ist bei Datenbanken ein spezielles Zeichen. | ||
Zeile 16: | Zeile 19: | ||
[[Datei:Mutillidae-01.png]] | [[Datei:Mutillidae-01.png]] | ||
− | == | + | =generierter Fehler 1= |
+ | [[Datei:Mutillidae-02.png]] | ||
+ | =Erkenntnisse= | ||
+ | *Dem Anwender wird eine Fehlermeldung mit vielen Systeminformationen angezeigt. | ||
+ | *Die Tatsache dass ein solcher Fehler nicht abgefangen wird lässt auf Angreifbarkeit schließen. | ||
+ | *Im Hintergrund läuft eine MySQL Datenbank. | ||
+ | *Die abgesetzte SQL-Abfrage ist zu sehen. Hier erscheint in der Abfrage nur der Benutzername. | ||
+ | <nowiki>SELECT username FROM accounts WHERE username=''';</nowiki> | ||
− | * | + | =weiterer Test= |
− | + | *da in der obigen Abfrage nur der Benutzername auftaucht geben wir nun ein einzelnes Hochkomma im Eingabefeld für das Passwort ein. | |
+ | [[Datei:Mutillidae-03.png]] | ||
+ | =generierter Fehler 2= | ||
+ | [[Datei:Mutillidae-04.png]] | ||
+ | *Hier tauchen sowohl Benutzername und Passwort in der Abfrage auf. | ||
+ | =Manipulation der Abfrage= | ||
+ | *Eingabe von 'or 1=1-- im Eingabefeld für den Namen. (Achtung: am Schluß muss ein Leerzeichen sein.) | ||
+ | *generierte Abfrage: | ||
+ | <nowiki>SELECT username FROM accounts WHERE username=''or 1=1-- ';</nowiki> | ||
+ | *Die beiden Minuszeichen mit folgendem Leerzeichen bewirken, dass MySQL den Rest der Zeile als Kommentar interpretiert. (wird hier gebraucht wegen dem abschließenden einzelnen Hochkomma das sonst einen Fehler generieren würde.) | ||
− | |||
*Nach Anklicken des Buttons Login ist man als Benutzer admin angemeldet. | *Nach Anklicken des Buttons Login ist man als Benutzer admin angemeldet. | ||
+ | *Der Grund, dass man hier als Admin angemeldet ist, liegt in der Struktur der Anwendung, da der Benutzer admin als erster Eintrag in der entsprechenden Tabelle steht. | ||
+ | |||
+ | =Schlußfolgerungen= | ||
+ | *Grundlage einer Manipulation / eines Eindringens ist die Informationssammlung. | ||
+ | *Je nach gefundenen Informationen sind die Manipulationsmöglichkiten unterschiedlich. | ||
+ | **System | ||
+ | **Struktur der Anwendung | ||
+ | **Struktur der Datenbank | ||
+ | **abgefangene / nicht abgefangene Fehler | ||
+ | |||
+ | =Gegenmassnahmen= | ||
+ | *Niemals Variablen von Aussen (Benutzereingaben) ohne Bearbeitung / Prüfung übernehmen und in SQL-Abfragen verwenden. | ||
+ | *Entsprechende Funktionen der Programmiersprachen / Scriptsprachen benutzen, die problematische Zeichen in variablen durch sichere Strings ersetzt. (Escape / Entwertung von Sonderzeichen) |
Aktuelle Version vom 24. Juni 2021, 12:27 Uhr
Voraussetzung
- Security level: 0
Allgemein
Beispiel: Umgehen der Anmeldung
- Oft sind Anmeldungen datenbankbasiert.
- Test der Anmeldeseite auf Möglichkeiten der Informationsgewinnung.
- Test der Anmeldeseite auf Möglichkeiten der Manipulation.
Aufruf der Anmeldemaske
- OWASP 2017 -> A1 Injection (SQL) -> SQLi Bypass Authentication -> Login
Versuch einen Fehler zu generieren
- Eingabe eines einzelnen Anführungszeichens in Eingabefeld Username.
- Ein einzelnes Anführungszeichen ist bei Datenbanken ein spezielles Zeichen.
generierter Fehler 1
Erkenntnisse
- Dem Anwender wird eine Fehlermeldung mit vielen Systeminformationen angezeigt.
- Die Tatsache dass ein solcher Fehler nicht abgefangen wird lässt auf Angreifbarkeit schließen.
- Im Hintergrund läuft eine MySQL Datenbank.
- Die abgesetzte SQL-Abfrage ist zu sehen. Hier erscheint in der Abfrage nur der Benutzername.
SELECT username FROM accounts WHERE username=''';
weiterer Test
- da in der obigen Abfrage nur der Benutzername auftaucht geben wir nun ein einzelnes Hochkomma im Eingabefeld für das Passwort ein.
generierter Fehler 2
- Hier tauchen sowohl Benutzername und Passwort in der Abfrage auf.
Manipulation der Abfrage
- Eingabe von 'or 1=1-- im Eingabefeld für den Namen. (Achtung: am Schluß muss ein Leerzeichen sein.)
- generierte Abfrage:
SELECT username FROM accounts WHERE username=''or 1=1-- ';
- Die beiden Minuszeichen mit folgendem Leerzeichen bewirken, dass MySQL den Rest der Zeile als Kommentar interpretiert. (wird hier gebraucht wegen dem abschließenden einzelnen Hochkomma das sonst einen Fehler generieren würde.)
- Nach Anklicken des Buttons Login ist man als Benutzer admin angemeldet.
- Der Grund, dass man hier als Admin angemeldet ist, liegt in der Struktur der Anwendung, da der Benutzer admin als erster Eintrag in der entsprechenden Tabelle steht.
Schlußfolgerungen
- Grundlage einer Manipulation / eines Eindringens ist die Informationssammlung.
- Je nach gefundenen Informationen sind die Manipulationsmöglichkiten unterschiedlich.
- System
- Struktur der Anwendung
- Struktur der Datenbank
- abgefangene / nicht abgefangene Fehler
Gegenmassnahmen
- Niemals Variablen von Aussen (Benutzereingaben) ohne Bearbeitung / Prüfung übernehmen und in SQL-Abfragen verwenden.
- Entsprechende Funktionen der Programmiersprachen / Scriptsprachen benutzen, die problematische Zeichen in variablen durch sichere Strings ersetzt. (Escape / Entwertung von Sonderzeichen)